-4

im 将 uint32_t 十六进制数转换为 uint32_t BCD 数。并对 uint64 hex 到 BCD 做同样的事情......

我有这个来自 uint16

uint16_t CvtBcd(uint16_t HexNumber)
{
  return ((HexNumber/ 10) << 4) | (HexNumber% 10); 
}

编辑:

我将把它用作外部代码,用于更大的程序。

// Converts a uint32_t hex number into uint32_t BCD number.
extern uint32_t Cvt32Bcd(uint32_t HexNumber)
{
  return ((HexNumber/10) << 8 | (HexNumber % 10));
}
4

1 回答 1

2

在二进制编码的十进制表示中,每个十进制数字需要四位,因此您不能将所有(无符号)整数转换为相同大小的 BCD 表示,通常您需要更大的类型。忽略该问题,将任意大小的无符号整数转换为其 BCD 表示的算法是

uintN_t convert_to_BCD(uintN_t n) {
    uintN_t bcd = 0;
    int shift = 0;
    while(n) {
        bcd |= (n % 10) << shift;
        n /= 10;
        shift += 4;
    }
    return bcd;
}

为避免溢出,请使返回类型大于参数类型,但这当然不适用于最大的可用输入类型。然后,您可以使用一个数组unsigned char来保存数字,或者使用一个包含两个uintN_ts 的结构来保存结果。

于 2012-07-30T12:25:01.870 回答