BCD到十进制和十进制到BCD
问题描述:
我在写库为RTC模块的Arduino其中数据存储在BCD。我知道如何将十进制数转换为BCD,但在编程编写时遇到了一些问题。在搜索互联网后,我得到了两个公式,它们如下,并且工作完美,但无法理解它是如何计算的。BCD到十进制和十进制到BCD
1.一级方程式
DEC为BCD
(value/10 * 16) + (value % 10)
例
DEC - > 40其转换为在BCD这又等于64.
所以,如果我把公式放在公式中,我会得到相同的结果。
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64
BCD到DEC
(value/16 * 10) + (value % 16)
2. Formula2
DEC为BCD
val + 6 * (val/10)
BCD到DEC
val - 6 * (val >> 4)
如果有人能详细解释它,它会有所帮助。
感谢所有提前。
答
正确的转换功能是:
byte bcdToDec(byte val)
{
return((val/16*10) + (val%16));
}
byte decToBcd(byte val)
{
return((val/10*16) + (val%10));
}
为什么这项工作?让我们以一个单一的数字5.在二进制,它是
0101 = 5
现在让我们采取同样的数字,加四个零到右边它转移4位到左:
0101 0000 = 50 BCD
那怎么BCD作品。由于需要四位二进制数字来表示0到9的十进制数字,所以每个十进制数字由四位表示。关键是将四位数以二进制乘法或除以16,所以这就是公式中16
值的原因。
因此,让96:
0110 = 6
1001 = 9
1001 0110 = 96 BCD