我正在用Arduino为RTC模块编写一个库,其中数据存储在BCD中。我知道十进制数是如何转换成BCD的,但在编程编写它时遇到了一些问题。在网上搜索后,我得到了两个公式,它们如下,工作得很好,但无法理解它是如何计算的。
1. Formula1
DEC到BCD
(value / 10 * 16) + (value % 10)示例
DEC -> 40,它在BCD中转换为01000000,再次等于64。
所以如果我把公式放进去,我得到的结果也是一样的。
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64BCD到DEC
(value / 16 * 10) + (value % 16)2. Formula2
DEC到BCD
val + 6 * (val / 10)BCD到DEC
val - 6 * (val >> 4)如果有人能详细解释的话,那将是有帮助的。
感谢所有的提前。
发布于 2017-08-12 23:14:48
正确的转换函数是:
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}为什么要这么做?让我们取一个个位数5。在二进制中,它是
0101 = 5 现在,让我们以相同的数字为例,向左移动四个位置,在右边添加四个零:
0101 0000 = 50 BCD这就是BCD的工作原理。因为它需要四个二进制数字来表示小数位数0到9,所以每一个小数位数都用四位来表示。关键是将二进制中的四个位置相乘或除以16,这就是公式中16值的原因。
让我们拿96个:
0110 = 6
1001 = 9
1001 0110 = 96 BCDhttps://stackoverflow.com/questions/45655484
复制相似问题