BCD格式及与十进制/十六进制的转换

news/2024/11/27 19:58:12/

本文框架

  • 前言
  • 1. BCD码是什么?
  • 2. 不同进制与BCD码之间的转换
    • 2.1 十进制与BCD码的转换
      • 2.1.1 十进制转换为BCD码
      • 2.1.2 BCD码转换为十进制
    • 2.2 十六进制与BCD码的转换

前言

在诊断快照开发中会遇到保存年月日等使用BCD码格式的需求,本篇我们就一起看一下BCD码是什么?十进制与BCD码如何互换?十六进制与BCD码如何互换?在这里会直接封装成可以使用的接口供大家直接在项目中调用,方便你我他。

1. BCD码是什么?

BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码使用四个位Bit来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
举个栗子,对于十进制的19,对应BCD码格式就是0001 1001,即前四个Bit合起来为1,后一个Bit合起来为9,这样的表达形式对于日期,时间等表达上较为直观。

另外,对于BCD码也可细分成下面的8421码,5421码,2421码及余3码等,8421码,5421码,2421码为有权BCD码,但加权方式不一样,比如对于8421码,四个Bit对应的值分别为8,4,2,1。8421BCD码也是使用较多的BCD编码格式,下面我们讲到的格式互换也是以8421BCD码进行,后续提到的BCD码默认是8421BCD码。
在这里插入图片描述

2. 不同进制与BCD码之间的转换

本章节我们会说明不同进制与BCD码之间的转换,计算方法+接口封装,从学到用相结合。

2.1 十进制与BCD码的转换

在十进制转换到BCD码时,核心思想即是将个位数放在低四Bit,十位数放在顺序往前的四Bit,如果有百位,千位以此类推,涉及到位移操作。

2.1.1 十进制转换为BCD码

int Func_DecToBcd(int decimal)
{int sum = 0;  //sum为BCD码for (int i = 0; decimal > 0; i++){sum |= ((decimal % 10 ) << ( 4*i));decimal /= 10; }return sum;
}

2.1.2 BCD码转换为十进制

int Func_BcdToDec( int bcd)
{int sum = 0; // sum为十进制int c = 1;  //c乘法因子,每次翻10倍for(int i = 1; bcd > 0; i++){if( i >= 2){c*=10;}sum += (bcd%16) * c;bcd /= 16;  // 右移四位}

2.2 十六进制与BCD码的转换

注意这里的0x15,在本示例代码中需要先将其转换成十进制,即对应十进制21,再转换为BCD码,代码待进一步完善。

最后附一张换算图:
在这里插入图片描述


http://www.ppmy.cn/news/185698.html

相关文章

怎么找西门子的资料

自从大学之后&#xff0c;就再也没接触过西门子&#xff0c;大学时做的PLC设计用到了S7-200&#xff0c;从那时算起&#xff0c;到现在已经有四五年没用过了。所以觉得很生疏。现在重新捡起来&#xff0c;发现软件版本换了又换&#xff0c;资料还是相对不好找的。不过一番周折之…

西门子(中国)有限公司

西门子是世界上最大的电气和电子公司之一。西门子的中国业务是其亚太地区业务的主要支柱&#xff0c;并且在西门子全球业务中起着越来越举足轻重的作用。西门子在中国的信息通讯业务始于1985年&#xff0c;时至今日&#xff0c;西门子在中国已经建立了28个地方办事处和40多家合…

西门子s7-200PLC的定时器

西门子s7-200PLC的定时器 定时器是PLC中常用的元件之一&#xff0c;在使用时要预置定时值&#xff0c;在运行过程中当定时器的输入条件满足时&#xff0c;当前值会从0开始安装一定的单位增加&#xff0c;当定时器的当前值到达设定值时&#xff0c;定时器开始动作&#xff0c;从…

7月蓄势待发,2023上海内部物流展,预登记全面启动!

观众预登记通道现已全面开放 展会时间 2023年7月5日 9:00-17:00 2023年7月6日 9:00-17:00 2023年7月7日 9:00-15:00 展会地点 上海新国际博览中心&#xff08;浦东新区龙阳路2345号&#xff09; 同期展会 2023上海国际AGV机器人产业展 2023上海国际电商物流包装产业展 2…

如何解决MediaPlayer播放音频时,出现“无法播放该文件”、“播放失败”等错误消息的问题?

如何解决MediaPlayer播放音频时&#xff0c;出现“无法播放该文件”、“播放失败”等错误消息的问题&#xff1f; MediaPlayer是Android平台上用于播放音频和视频文件的类&#xff0c;它提供了各种功能和方法&#xff0c;可以方便地实现多媒体播放功能。如何使用MediaPlayer的基…

TiDB亿级数据亚秒响应查询方案介绍

目录 1 什么是TiDB2 什么是NewSQL2.1 传统SQL的问题2.1.1 升级服务器硬件2.1.2 数据分片 2.2 NoSQL 的问题2.2.1 优点2.2.2 缺点 2.3 NewSQL 特性2.3.1 NewSQL 的主要特性&#xff1a;2.4 三种SQL的对比 3 TiDB怎么来的3.1 TiDB社区版和企业版 4 TIDB核心特性4.1 水平弹性扩展4…

Ryzen3700x+R5-230P鲁大师跑分

AMD官方下载的R5-230P windows10驱动&#xff0c;但是任务管理器中并不能显示&#xff0c;鲁大师虽然会识别出Radeon HD 6570&#xff0c;跑分性能正常&#xff0c;而且玩lol 自定义的时候&#xff0c;中等特效30多帧&#xff08;谁说lol只吃cpu的&#xff09;&#xff0c;GPU-…

amd3600 vs amd4800h vs GT1030

2021.03.08 官网最新鲁大师 没想到4800h移动端待机15w不到的mini主机在cpu上略胜一筹 amd3600 左侧主机单机功耗100w 4个硬盘 6个风扇 话说2021年 nvida的1030 500元真是坑人,连个核显都远远打不过,要不是因为独立的显存让lol帧数高点,不然一无是处