C ++ Switch语句中的十六进制值

时间:2013-04-27 21:00:56

标签: c++ c switch-statement

是否可以使用十六进制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但十六进制会更方便。

其他控制语句的解决方案也不错。

5 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

您需要使用0xF。

答案 3 :(得分:1)

是;使用0x为十六进制值添加前缀,以使编译器将它们视为十六进制文字。 同样,前缀为0以将它们视为八进制。

答案 4 :(得分:0)

是的,确实如此。使用以下语法:

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