我正在将十六进制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;
}
答案 0 :(得分:1)
我的想法是你转换为BCD的代码有问题。它不会做它应该做的事情,因此你正在观察错误的结果。
除了这个笑话:0xe0如果存储在signed char中则是负数。如果您在计算结果时没有特别注意您正在使用的临时变量的符号,那么这可能会对您产生令人讨厌的伎俩。
编辑现在您发布了一些代码,很明显,虽然您为lo
计算了第一个数字的正确值,但您需要另一个步骤才能获得正确的值进入hi
。
使用0xe0
作为输入,实际上是在计算(22<<4) + 4 = 356 = 0x164
而不是(2<<8)+(2<<4)+4 = 548 = 0x224
。