[英]BCD Calculator issue
我正在将十六进制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;
}
我的想法是,您转换为BCD的代码存在错误。 它没有执行预期的操作,因此您所观察到的结果是错误的。
除了这个笑话:如果存储在带符号的char中,则为0xe0为负数。 如果您在计算结果时不特别注意所使用的临时变量的符号,那么这可能会给您带来麻烦。
编辑:现在,您已经发布了一些代码,很显然,尽管您将第一个数字的正确值计算为lo
,但是还需要执行另一步骤才能将正确的值获取为hi
。
使用0xe0
作为输入,您实际上是在计算(22<<4) + 4 = 356 = 0x164
而不是(2<<8)+(2<<4)+4 = 548 = 0x224
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.