-1

チェックサム評価器を書こうとしています。以下のコードを書きました。

0xFF -
    (  (
        0x10 + 0x01 +0x00+  0x13+  0xa2+ 0x00+ 0x40+  0x4a+
            0xfd + 0x15 + 0xff + 0xfe+ 0x00+ 0x08 +
                ( 1 + 30 ) +
                ( 2 + 30 )
           )
   & 0xFF
 )

行 ( 1 + 30 ) および ( 2 + 30 ) を参照してください。これらは 16 進数値に変換されますが、加算中に変換され、結果は予期されません。(1 + 30) が 16 進値であると言う方法はありますか?

4

1 に答える 1

2

コンパイラーで3016進値として使用する場合は、。で言及し0xます。好き(0x1 + 0x30) + (0x2 + 0x30)

int a-ここではtoaの値を格納できますが、その範囲はtoではありません。値は常にバイナリ形式で保存されます。10進数、16進数、8進数などの任意の形式で印刷できます。+2^31-(2^31-1)09aprintf("%d, %x, %o", a, a, a);

aしたがって、の代わりに変数を使用する場合30。以下のように使用してください。

int a = 0x30; //or int a = 48; 48 is the decimal representation of 0x30
....
(0x1 + a)
....

16進値とあまり混同しないでください。それは単なる値の表現です。あなたが10本のペンを持っているなら、あなたは次のように言うことができます

  • 10 10進数形式のペンを持っています
  • 0xA16進形式のペンを持っています
  • 12 8進数形式のペンを持っています
于 2013-01-15T18:37:30.883 に答える