关于四字节转换中 int 与 double的区别

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

因为后面还需要做某些算法转换需要用到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;

}

运行结果:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值