C语言的问题 ,0x31,0X32为什么要这样写呢,应该是10进制?

switch(CommandBuf[4])
{
case 0x31: realy0=0; //继电器 1开启
break;
case 0x32: realy1=0; //继电器 2开启
break;
case 0x33: realy2=0; //继电器 3开启
break;
case 0x34: realy3=0; //继电器 4开启
break;
case 0x35: realy4=0; //继电器 5开启
break;
case 0x36: realy5=0; //继电器 6开启
break;
case 0x37: realy6=0; //继电器 7开启
break;
case 0x38: realy7=0;

1、0x31是十六进制,转化成十进制是49,查ASC码表,49是字符‘1’。0x32应该是50,字符是'2'。
2、C/C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等.其中的x不用区分大小写(注意:0x中的0是数字0,而不是字母O)。此外,C/C++中,10进制数有正负之分。比如12表示正12,而-12表示负12。但8进制和16进制只能表达无符号的正整数,如果在代码中写-0xF2,C/C++并不把它当成一个负数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-27
因为你如果在一个文本编辑器中输入数字1,编辑器会自动将这个数字1转成49,即16进制的0x31,而在程序中,你如果从这个文本文件中获取这个字符,那么他就是0x31,即00110001,所以为了数据匹配,case后面均为0x31,0x32等等追问

那为什之前都是case:0,case:1,case2;

追答

这个是和实际情况的有关的,我估计的你数组Command【4】的数据是从文本文档输入获得的。

本回答被提问者和网友采纳
第2个回答  2014-04-27
0x开头表示是一个16进制数,10进制不需要加任何内容
第3个回答  2014-04-27
case后面只要是常量就可以 不管是什么进制
相似回答