如何在C中将uint32转换为uint64?

时间:2012-07-30 12:12:32

标签: c uint32 uint64

im将uint32_t十六进制数转换为uint32_t BCD编号。并将对uint64十六进制到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));
}

1 个答案:

答案 0 :(得分: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_t的结构来保存结果。