我正在将十六进制的0xE0转换为BCD。当我这样做的时候,我得到的是64分。我知道这是完全错误的,也许是我的C++代码中的某些东西,但是64听起来就是不正确。有什么想法吗?0xE0是一个特例吗?(十进制的0xE0是224。)
下面是我的代码的一部分:
unsigned char Hex2BCD(unsigned char param)
{ unsigned char lo;
unsigned char hi;
unsigned char val;
unsigned char buf[10];
hi = param/ 10;
lo = param- (hi * 10);
val= (hi << 4) + lo;
return val;
}发布于 2011-10-08 00:00:06
我的想法是,您的代码转换为BCD是错误的。它没有做它应该做的事情,因此你观察到的结果是错误的。
除了这个笑话: 0xe0如果存储在有符号字符中是一个负数。如果你在计算结果时不特别注意你正在使用的临时变量的符号,这可能会给你带来一些恶作剧。
编辑:现在您已经发布了一些代码,很明显,尽管您在lo中计算了第一个数字的正确值,但是还需要另一个步骤才能将正确的值传递到hi中。
使用0xe0作为输入,实际上是在计算(22<<4) + 4 = 356 = 0x164而不是(2<<8)+(2<<4)+4 = 548 = 0x224。
https://stackoverflow.com/questions/7689803
复制相似问题