什么C数据类型应该用于包含2位HEXADECIMAL值的数组?

时间:2017-03-29 05:21:11

标签: c arrays types compiler-errors

我正在尝试调试的程序中有以下数组:

static u8 info3[LEN] = {
  06,
  07,
  04,
  00,
  00,
  01,
  00,
  0e,
  03
};

我收到以下错误:

test.c(45): error C2021: expected exponent value, not ','

和第45行是包含 0e, 的行。根据{{​​3}}资源,

  

预期的指数值,而不是'字符'

     

用作浮点常数的指数的字符不是   有效的号码。请务必使用范围内的指数。

这告诉我编译器认为编译器认为info3包含浮点值。但是那里的值实际上是2位十六进制数。

所以问题是这里应该使用哪种数据类型来存储在这个数组中的值?

3 个答案:

答案 0 :(得分:5)

您应该在这些号码上添加0x。 例如,0x01, 0x0e或编译器不会将它们视为十六进制。

它在e之后期望指数值的原因是因为你可以在C中使用科学记数法,例如float var = 1.54334E-34

答案 1 :(得分:1)

要在C中写入十六进制数字,请编写0x后跟十六进制数字。因此,C中的两位十六进制数字看起来像

0x6a
0x0e
0xff
0x29
0xbc

编写0e时,编译器会抱怨,因为该位置的e表示“时间10”。例如

35e22

意味着35次10到22的力量和

1E9

是10亿(10倍到9倍的力量)。

如果你写

0e

它看起来像是........的零次,并且编译器抱怨因为你没有给出指数。

答案 2 :(得分:1)

在C中,任何以0开头的常量是八进制常量。因此,015是八进制15并且是十进制13。此外,08无效,因为没有八进制数的值不能大于8。

如果您想要十六进制常量,则应使用0x080x0a等。