编写监控一定要注意帧头的判断。
假设你的帧头是0xbb,0x65,
char buff[1024];是存储缓存的地方
你把接收到的数据存到buff[i]中了
如果你解包的时候用下面语句判断帧头
if(buff[0]==0xbb&&buff[1]==0x65)
那么就会出错,
因为收到的数据一般都是有符号字符变量其实
buff[0]!=0xbb;
比如
char a1=0xbb;
char a2=0x45;
if(a1==0xbb)
cout<<"相等"<<endl;
else
cout<<"不相等"<<endl;
if(a2==0x45)
cout<<"相等"<<endl;
else
cout<<"不相等"<<endl;
屏幕输出是:
不相等
相等
大家可能发现一个问题,为什么第一个是不相等,而第二个是相等呢,其实要注意到,0xaa表示成二进制是1011 1011第8位是 1,
而0x45 表示成二进制是0100 0101,第八位是零。第八位0和1在表示无符号和有符号数据含义是不一样的。
大家可以在VC++里面试一下。