我有一个unsigned char数组,包含以下值:“\ x00 \ x91 \ x12 \ x34 \ x56 \ x78 \ x90”; 这是以十六进制格式发送的号码。 此外,它是在BCD格式:00字节,91在另一个字节(8位)BCD转换为无符号字符
在另一侧我需要给我使用以下代码作为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转换是根据十进制值进行的。
能否请你帮我,让我可以在煤焦接收输出为00911234567890
问候 卡兰
您有溢出问题。一个'unsigned int'(最可能)是32位,即四个字节。你无法在32位变量中安装910亿个。 –