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

探讨了在处理低字节在前、高字节在后的四字节数据时,直接转换为double类型可能导致的数据解析错误,特别是在遇到负值时的问题。通过C语言示例,分析了int和double类型在处理FF字节时的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

}

运行结果:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值