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