BCD计算器问题

时间:2011-10-07 15:56:22

标签: c++ c bcd

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

1 个答案:

答案 0 :(得分:1)

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

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

编辑现在您发布了一些代码,很明显,虽然您为lo计算了第一个数字的正确值,但您需要另一个步骤才能获得正确的值进入hi

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