我正在编写一个关于在Arduino中存储BCD数据的RTC模块库,但是在以编程方式编写时遇到了一些问题。我知道如何将十进制数转换为BCD,但无法理解它是如何计算的。在搜索互联网后,我找到了两个完美运行的公式,分别是:
1. 公式1
十进制转BCD
(value / 10 * 16) + (value % 10)
示例
十进制 -> 40 转换为 二进制编码十进制 (BCD) -> 01000000,这相当于 64。
因此,如果将其放入公式中,我会得到相同的结果。
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64
BCD转DEC
(value / 16 * 10) + (value % 16)
2. 公式2
十进制转二进制码(BCD)
val + 6 * (val / 10)
BCD转为十进制
val - 6 * (val >> 4)
如果有人能详细解释一下,那将非常有帮助。提前感谢大家。