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));
}
答案 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
的结构来保存结果。