【问题标题】:Hexadecimal Value In C++ Switch StatementC++ Switch 语句中的十六进制值
【发布时间】:2013-04-27 21:00:56
【问题描述】:

是否可以使用十六进制 case 语句执行切换?

例如:

switch (integer) {
    case: 1
         function();
         break;
    case: F:
         function();
         break;
}

g++ 抱怨说:

example.cpp: In function ‘int main()’:
example.cpp:148:18: error: ‘F’ was not declared in this scope

我假设编译器试图将F 视为变量。我知道我可以使用值 15 而不是 F,但十六进制会更方便。

其他控制语句的解决方案也很好。

【问题讨论】:

  • google "c++ 十六进制文字"
  • 好多了。多谢你们。 @PlasmaHH 我试图用谷歌搜索它,但忘记使用文字这个词,所以没有得到相关结果。

标签: c++ c switch-statement


【解决方案1】:

在 C 中,可能还有 C++,您可以在 switch 语句中使用任何整数常量。那不是你的问题。

您的问题是 F 不是常量,而是变量名。要以十六进制指定常量,请使用前导 0x,例如0xf

同样的事情适用于任何其他可以采用(十进制)值的上下文 - 您可以通过使用前导 0x 获得十六进制。或者,如果您出于某种原因需要八进制,请使用前导 0,不带 x。

因此0170xf15都是同一个数字,并且可以在c中互换使用。

【讨论】:

  • 因此,0170xf15 都是同一个数字,并且可以在 c 中互换使用。 对于这个特定值来说是这样,但不是对于具有 32 位整数的系统上的 21474836480x800000002147483648 == 0x80000000-1 < 2147483648 为真,但 -1 < 0x80000000 为假。
【解决方案2】:

123 被视为十进制。
0123 被视为八进制。
0x123 被视为十六进制。
0b101 被视为二进制 (C++14)。

你需要使用 0xF。

【讨论】:

    【解决方案3】:

    如果要将十六进制值分配给变量,则必须使用前缀 0x,在您的情况下为 int var = 0xF

    【讨论】:

      【解决方案4】:

      是的;在十六进制值前面加上 0x 让编译器将它们视为十六进制文字。 同样,前缀0 将它们视为八进制。

      【讨论】:

        【解决方案5】:

        是的,是的。使用这个语法:

        unsigned char buffer[12];
        switch (buffer[0]) {
             case 0x01:
                  // your code
                  break;
             case 0xAA:
                  // your code
                  break;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-01
          • 2014-11-30
          • 2011-12-09
          • 1970-01-01
          • 2010-10-03
          • 1970-01-01
          • 2018-07-26
          相关资源
          最近更新 更多