【问题标题】:What C datatype should be used for an array which will contain 2-digit HEXADECIMAL values?对于包含 2 位 HEXADECIMAL 值的数组,应该使用哪种 C 数据类型?
【发布时间】:2017-08-22 10:28:49
【问题描述】:

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

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

我收到以下错误:

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

第 45 行是包含 0e, 的行。根据this MSDN资源,

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

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

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

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

【问题讨论】:

    标签: c arrays types compiler-errors


    【解决方案1】:

    在 C 中,任何以 0 开头的常量都是八进制常量。所以,015 是八进制 15 和十进制 1308 也是无效的,因为八进制 no 的值不能大于 8。

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

    【讨论】:

      【解决方案2】:

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

      0x6a
      0x0e
      0xff
      0x29
      0xbc
      

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

      35e22

      表示 35 乘以 10 的 22 次方和

      1e9

      是十亿(10 的 9 次方)。

      如果你写

      0e
      

      它看起来像 0 乘以 10 ......编译器抱怨因为你没有给出指数。

      【讨论】:

      • 前导 0 表示数字是八进制,所以即使是 09 也无法编译。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-02
        • 2012-11-07
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        相关资源
        最近更新 更多