【发布时间】:2013-11-16 00:45:36
【问题描述】:
我有一个包含以下值的无符号字符数组:"\x00\x91\x12\x34\x56\x78\x90"; 那是以十六进制格式发送的数字。 此外,它是 BCD 格式:00 字节,91 另一个字节(8 位)
另一方面,我需要将此值解码为 0091234567890。
我正在使用以下代码:
unsigned int conver_bcd(char *p,size_t length)
{
unsigned int convert =0;
while (length--)
{
convert = convert * 100 + (*p >> 4) * 10 + (*p & 15);
++p
}
return convert;
}
但是,我得到的结果是 1430637214。
我的理解是,我发送的是十六进制值 (\x00\x91\x12\x34\x56\x78\x90),而我的 bcd 转换作用于十进制值。
您能帮我吗,以便我可以在 Char 中收到 00911234567890 的输出
问候 卡兰
【问题讨论】:
-
您遇到了溢出问题。
unsigned int(很可能)是 32 位,即四个字节。您无法将 910 亿放入 32 位变量中。
标签: c