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));
}

最佳答案

在二进制编码的十进制表示形式中,每个十进制数字需要四位,因此无法将所有(无符号)整数转换为相同大小的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_t的结构保存结果。

关于c - 如何在C中将uint32转换为uint64?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11721301/

10-11 17:23