关于四字节转换中 int 与 double的区别_double[,] buf - wpsshop博客
当前位置:   article > 正文

关于四字节转换中 int 与 double的区别_double[,] buf

double[,] buf

最近在项目中,需要处理下位机传回的四字节数据,低字节在前,高字节在后,每四个字节组成一个样本数据。

因为后面还需要做某些算法转换需要用到double类型处理,所以在字节处理时,偷懒选择了直接转化为double,然后就导致收到的

样本数据进行转化后,遇到负值就错误,而且一个负数也没有,下面记录下原因,当做总结。

测试程序:

  1. int main()
  2. {
  3. //高-低 4294967295
  4. printf("FFFFFFFF ---- 4294967295\n");
  5. char buf[4] = {0xFF,0x34,0x5E,0x4A};
  6. int data = buf[0]<<24&0xFF000000|buf[1]<<16&0xFF0000|buf[2]<<8&0xFF00|buf[3]&0xFF;
  7. printf("int值 = %d \n",data);
  8. double data1 = buf[0]<<24&0xFF000000|buf[1]<<16&0xFF0000|buf[2]<<8&0xFF00|buf[3]&0xFF;
  9. printf("double值 = %lf \n",data1);
  10. //int 4个字节当最高位出现FF时 ,符号位为1表示为负数,此时int的取值转化为负数
  11. //当为double时,为8个字节,第四位的FF并不会影响double的符号位 所以double取值仍为正。
  12. printf("float = %d\n",sizeof(float));
  13. printf("double = %d\n",sizeof(double));
  14. getchar();
  15. return 0;
  16. }

运行结果:

原因在代码中基本解释清楚了。这种低级错误本是不应该犯的,记录一下,当做教训。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/929846
推荐阅读
相关标签