是否可以使用十六进制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
但十六进制会更方便。
其他控制语句的解决方案也不错。
答案 0 :(得分:8)
在C中,也可能是C ++,你可以在switch语句中使用任何整数常量。那不是你的问题。
你的问题是F
不是常数,而是变量名。要以十六进制指定常量,请使用前导0x
,例如0xf
。
同样的事情适用于任何其他可以采用(十进制)值的上下文 - 使用前导0x
得到十六进制。或者如果您出于某种原因需要八进制,请使用前导0
,而不使用x。
因此017
,0xf
和15
都是相同的数字,并且可以在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;
}