BCD转换成bin格式

BCD码

BCD码在报文中传输时,可以理解为样子是16进制,但实质为BCD(二—十进制数)。例如一帧数据传输日期时,报文格式为
20 18 04 04
代表20180404日,并不是16进制的(0x20 0x18 0x04 0x04),但是我们知道报文中的数据一般为16进制,在有些时候需要我们把这个BCD码转换成十六进制。关于如何判断是否为BCD码请参看之前的文章如何判断BCD码

转换

转换思路很简单:高四位为十位,低四位为个位数,因此将高四位乘以10在加上低四位即可转换成bin码。

void BcdToBin(U8 *src, OUT U8 *dest, U8 len)
{	
	U8 i;

	for(i = 0 ; i < len ; i++)
	{
		*(dest + i) = (*(src + i) >> 4) * 10 + (*(src + i) & 0x0F);
	}
}

v v v v v v

本文为作者原创,请勿转载,转载请联系作者。
点击下方卡片,关注我的公众号,有最新的文章和项目动态。

v v v v v v

### BCDBIN数据格式的区别及应用场景 #### 数据格式定义 BCDBinary-Coded Decimal)是一种编码形式,其中每一个十进制数字由四位二进制数来表示。这种编码方式使得十进制数值可以直接映射到二进制位上[^2]。而 BIN 是指普通的二进制编码,它按照逢二进一的原则进行计数,是最基础的计算机内部数据表达方式之一[^3]。 #### 存储效率对比 从存储角度来看,BIN 编码更加高效。因为对于相同的数值范围,BIN 所需的比特数更少。例如,要表示 9 这个数字,BIN 需要 4 位即可完成 (即 `1001`);而在 BCD 中,同样也需要 4 位,但由于每位仅能表示一位十进制数,因此无法充分利用这四个位置的所有可能组合。 #### 处理复杂度比较 尽管如此,在涉及大量算术运算时,由于现代处理器架构针对的是标准二进制操作,所以通常会先将 BCD 转换成 BIN 来简化计算过程后再BCD 形式输出给用户查看或者进一步用于显示设备等场景下使用。然而当只需要简单加减法或是直接读取输入/写入输出的时候,则利用 BCD 更为方便快捷一些因为它不需要额外换步骤就能得到最终结果[^4]。 #### 应用领域分析 - **BCD的应用** - 显示系统:如电子表盘上的时间日期信息都是通过硬件电路解码后的BCD信号驱动LED数码管显示出相应字符图形; - 嵌入式实时钟(RTC): STM32系列微控制器中的部分型号支持基于BCD格式的日历功能实现便捷的时间管理服务而不必担心跨年等问题带来的麻烦。 - **BIN的应用** - 计算机科学的核心组成部分——几乎所有的程序执行都依赖于底层CPU对指令序列解释并运行这些全是以纯二进制为基础构建起来的巨大体系结构之上; - 数字图像处理等领域也离不开高效的二机制算法优化性能表现等方面考虑采用纯粹意义上的二进制作为主要工作模式。 综上所述,虽然两者各有优劣之处但在实际工程实践中往往依据具体需求选取合适的一种方案加以应用从而达到最佳效果平衡点之间做出明智决策至关重要][^[^23]. ```python def decimal_to_bcd(decimal_number): """Convert a decimal integer to its equivalent Binary-Coded Decimal representation.""" bcd_result = '' while decimal_number > 0: nibble = decimal_number % 10 bcd_nibble_binary = bin(nibble)[2:].zfill(4) bcd_result += str(bcd_nibble_binary) + ' ' decimal_number //= 10 return ''.join(reversed([char for char in bcd_result.strip().split(' ')])).strip() print(f"Decimal {7} -> BCD {' '.join(['{:04b}'.format(int(digit)) for digit in list(str(7))])}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董董灿是个攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值