首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BCD到Decimal,Decimal到BCD

BCD到Decimal,Decimal到BCD
EN

Stack Overflow用户
提问于 2017-08-12 22:33:23
回答 1查看 15.8K关注 0票数 4

我正在用ArduinoRTC模块编写一个,其中数据存储在BCD中。我知道十进制数是如何转换成BCD的,但在编程编写它时遇到了一些问题。在网上搜索后,我得到了两个公式,它们如下,工作得很好,但无法理解它是如何计算的。

1. Formula1

DEC到BCD

代码语言:javascript
复制
(value / 10 * 16) + (value % 10)

示例

DEC -> 40,它在BCD中转换为01000000,再次等于64。

所以如果我把公式放进去,我得到的结果也是一样的。

代码语言:javascript
复制
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64

BCD到DEC

代码语言:javascript
复制
(value / 16 * 10) + (value % 16)

2. Formula2

DEC到BCD

代码语言:javascript
复制
val + 6 * (val / 10)

BCD到DEC

代码语言:javascript
复制
val - 6 * (val >> 4)

如果有人能详细解释的话,那将是有帮助的。

感谢所有的提前。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-12 23:14:48

正确的转换函数是:

代码语言:javascript
复制
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}

byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}

为什么要这么做?让我们取一个个位数5。在二进制中,它是

代码语言:javascript
复制
0101 = 5 

现在,让我们以相同的数字为例,向左移动四个位置,在右边添加四个零:

代码语言:javascript
复制
0101 0000 = 50 BCD

这就是BCD的工作原理。因为它需要四个二进制数字来表示小数位数0到9,所以每一个小数位数都用四位来表示。关键是将二进制中的四个位置相乘或除以16,这就是公式中16值的原因。

让我们拿96个:

代码语言:javascript
复制
0110 = 6
1001 = 9
1001 0110 = 96 BCD
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45655484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档