赞
踩
最近在项目中,需要处理下位机传回的四字节数据,低字节在前,高字节在后,每四个字节组成一个样本数据。
因为后面还需要做某些算法转换需要用到double类型处理,所以在字节处理时,偷懒选择了直接转化为double,然后就导致收到的
样本数据进行转化后,遇到负值就错误,而且一个负数也没有,下面记录下原因,当做总结。
测试程序:
- int main()
- {
- //高-低 4294967295
- printf("FFFFFFFF ---- 4294967295\n");
- char buf[4] = {0xFF,0x34,0x5E,0x4A};
- int data = buf[0]<<24&0xFF000000|buf[1]<<16&0xFF0000|buf[2]<<8&0xFF00|buf[3]&0xFF;
- printf("int值 = %d \n",data);
- double data1 = buf[0]<<24&0xFF000000|buf[1]<<16&0xFF0000|buf[2]<<8&0xFF00|buf[3]&0xFF;
- printf("double值 = %lf \n",data1);
-
- //int 4个字节当最高位出现FF时 ,符号位为1表示为负数,此时int的取值转化为负数
- //当为double时,为8个字节,第四位的FF并不会影响double的符号位 所以double取值仍为正。
- printf("float = %d\n",sizeof(float));
- printf("double = %d\n",sizeof(double));
- getchar();
- return 0;
-
- }

运行结果:
原因在代码中基本解释清楚了。这种低级错误本是不应该犯的,记录一下,当做教训。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。