先上代码:
#include<iostream>
using namespace std;
enum{ CFT_DIV = 1 ,CFT_F1 = 2 ,CFT_F2 = 3,CFT_ENT = 8};
int ParseStr(const char* lpBuf, int iBufLen)
{
if (lpBuf == NULL || iBufLen <= 0)
{
return -1;
}
// lp的解析字符串必须以SOH开始,以BS结束
cout<<lpBuf[0]<<lpBuf[iBufLen - 1]<<endl;
if (lpBuf[0] != CFT_DIV || lpBuf[iBufLen - 1] != CFT_ENT) // 重点1
{
return -1;
}
return 0;
}
int main()
{
char lpBuf[4]={'\u0001','0','\u0008','2'}; // 重点2
int ret=0;
ret = ParseHead(lpBuf,3);
cout<<"back value:"<<ret<<endl;
return 0;
}
enum中的CFT_DIV和CFT_ENT是无类型的,以CFT_DIV为例子,与char比较是判断该char的ascii码是否为1,但ascii码为1的字符为SOH,怎么输入呢,一种是'\u0001'
,一种是去ascii码在线网站进行转化:
扩展一下
- 1==CFT_DIV 为true
- int a=1; a==CFT_DIV 为false
所以,1本身只代表一个二进制串0000…0001,只是对于不同类型的1(0000…0001),其存储方式和解析方式有所不同。
由于为1的字符不方便输出,以ASCII码33为例子:
char a=33;
cout<<"char a:"<<a<<endl;
int b=33;
cout<<"int a:"<<a<<endl;
结果为
!
33
可见,同样一个二进制串,类型不同导致变量的行为方式也不同