0

0xE016進数をBCDに変換しています。これを行うと、64が返されます。これは完全に間違っており、C ++コードに含まれている可能性がありますが、64は正しく聞こえません。何か案は?0xE0特別な場合ですか?(0xE010進数で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に変換するためのコードはバグがあります。それは想定されていることを行わないので、あなたが観察している間違った結果です。

このジョークは別として、signedcharに格納されている場合は0xe0が負の数です。結果の計算中に使用している一時変数の符号に特別な注意を払わないと、厄介なトリックを実行する可能性があります。

編集:コードを投稿したので、最初の桁の正しい値をに計算しますがlo、正しい値をに入れるには別の手順が必要であることは明らかですhi

0xe0入力として使用すると、実際(22<<4) + 4 = 356 = 0x164にはの代わりに計算を行うことになり(2<<8)+(2<<4)+4 = 548 = 0x224ます。

于 2011-10-07T16:00:05.997 に答える