gpt4 book ai didi

c - BCD如何转换为十进制?

转载 作者:太空狗 更新时间:2023-10-29 14:50:20 26 4
gpt4 key购买 nike

如何将二进制编码的十进制数转换为表示形式的十进制数?我不想转换它的值,而是转换它的表示,这就是我的意思。

我想将 0x11 转换为十进制 11(不是 17)并将 0x20 转换为 20 (不是 32)。

unsigned char day = 0x11;
unsigned char month = 0x12;

int dayDecimal, monthDecimal;

我希望 dayDecimal 为 11 并且 monthDecimal = 12。我将使用 0x00 到 0x60 之间的范围,所以它应该是可能的。不会有“A”、“B”、“C”、“D”、“E”、“F”。

更新:

作为我正在进行的嵌入式项目的一部分,我实际上正在从 RTCC 芯片读取时间。小时、分钟、日期和月份以该形式返回。例如,如果分钟是 0x40,那么它意味着 40 分钟而不是 64 分钟,所以我需要能够正确地解释它。我需要以某种方式将 0x40 转换为 40 而不是 64。我希望这是可能的。

谢谢!

最佳答案

您需要处理两个 nybble,将更重要的 nybble 乘以 10,然后加上更不重要的 nybble:

uint8_t hex = 0x11;
assert(((hex & 0xF0) >> 4) < 10); // More significant nybble is valid
assert((hex & 0x0F) < 10); // Less significant nybble is valid
int dec = ((hex & 0xF0) >> 4) * 10 + (hex & 0x0F);

如果断言被禁用但输入是伪造的(例如 0xFF),您将得到应得的:GIGO — 垃圾输入,垃圾输出。您可以轻松地将其包装到一个(内联)函数中:

static inline int bcd_decimal(uint8_t hex)
{
assert(((hex & 0xF0) >> 4) < 10); // More significant nybble is valid
assert((hex & 0x0F) < 10); // Less significant nybble is valid
int dec = ((hex & 0xF0) >> 4) * 10 + (hex & 0x0F);
return dec;
}

这种转换让人联想到 BCD — Binary Coded Decimal .

关于c - BCD如何转换为十进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com