7

是否可以使用十六进制 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其视为变量。我知道F我可以只使用该值15,但十六进制会更方便。

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

4

5 回答 5

13

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

你的问题是这F不是一个常数,它是一个变量名。要以十六进制指定常量,请使用前导0x,例如0xf.

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

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

于 2013-04-27T21:09:09.517 回答
9

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

您需要使用 0xF。

于 2013-04-27T21:07:23.953 回答
6

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

于 2013-04-27T21:02:17.980 回答
1

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

于 2013-04-27T21:06:53.783 回答
0

是的。使用这个语法:

unsigned char buffer[12];
switch (buffer[0]) {
     case 0x01:
          // your code
          break;
     case 0xAA:
          // your code
          break;
}
于 2013-11-03T10:13:41.650 回答