0

我正在将十六进制转换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;
}
4

1 回答 1

1

我的想法是您转换为 BCD 的代码有问题。它没有做它应该做的事情,因此你观察到的结果是错误的。

除了这个笑话:如果存储在signed char 中,0xe0 是一个负数。如果您在计算结果时没有特别注意您正在使用的临时变量的符号,那可能会对您产生讨厌的影响。

编辑:现在您发布了一些代码,很明显,尽管您将第一个数字的正确值计算为 ,但lo您需要另一个步骤才能将正确的值输入hi

使用0xe0作为输入,您实际上是在计算(22<<4) + 4 = 356 = 0x164而不是(2<<8)+(2<<4)+4 = 548 = 0x224.

于 2011-10-07T16:00:05.997 回答