-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) 行,它们被转换为十六进制值,但在加法时它们被转换,结果不是预期的。有什么办法可以说 (1 + 30) 是我的 c 编译器兄弟的十六进制值吗?

4

1 回答 1

2

如果您希望编译器30用作十六进制值,请使用0x. 喜欢(0x1 + 0x30) + (0x2 + 0x30)

int a- 这里a可以存储+2^31to的值-(2^31-1),它的范围不是0to 9a始终以二进制格式存储值。我们可以以任何格式打印它,例如十进制、十六进制或八进制。printf("%d, %x, %o", a, a, a);

因此,如果您想使用变量a代替30. 像下面这样使用。

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

不要与十六进制值混淆太多。它只是一个值的表示。如果你有 10 支笔,你可以说喜欢

  • 我有10 十进制格式的笔
  • 我有0xA十六进制格式的笔
  • 我有12 八进制格式的笔
于 2013-01-15T18:37:30.883 回答