float类型转成4字节char的几种方式

转载自https://zhuanlan.zhihu.com/p/161206819

将float转换成char且保证精度数据不丢失,三种方法:强制类型转换、共同体、内存拷贝。
float在内存中的储存方式:https://blog.csdn.net/u014470361/article/details/79820892

一、强制类型转换

#include "stdio.h"

int main(void)
{
	float fa = -123.56;
	unsigned char farray[4] = { 0 };

	*(float*)farray = fa;
	printf("farray[0]=%#X,farray[1]=%#X,farray[2]=%#X,farray[3]=%#X\n", farray[0], farray[1], farray[2], farray[3]);
	printf("%f\n", *(float*)farray);

	return (0);
}

结果:

farray[0]=0XB8,farray[1]=0X1E,farray[2]=0XF7,farray[3]=0XC2
-123.559998

二、使用共同体转换

#include "stdio.h"

union {
	float fa;
	unsigned char farray[4];
}utemp;

int main(void)
{
	int i = 0;
	float ft = 0.0;

	utemp.fa = (float)123.56;
	printf("farray[0]=%#X,farray[1]=%#X,farray[2]=%#X,farray[3]=%#X\n", utemp.farray[0], utemp.farray[1], utemp.farray[2], utemp.farray[3]);
	ft = *(float*)utemp.farray;

	printf("%f\n", ft);

	return (0);
}

结果:

farray[0]=0XB8,farray[1]=0X1E,farray[2]=0XF7,farray[3]=0X42
123.559998

三、使用memcpy

#include "stdio.h"
#include "string.h"

int main(void)
{
	float fa;
	unsigned char farray[4];
	float ft;

	fa = 45.23;
	memcpy(farray, &fa, sizeof(farray));
	printf("farray[0]=%#X,farray[1]=%#X,farray[2]=%#X,farray[3]=%#X\n", farray[0], farray[1], farray[2], farray[3]);
	memcpy(&ft, &farray, sizeof(farray));
	printf("%f\n", ft);

	return (0);
}

结果:

farray[0]=0X85,farray[1]=0XEB,farray[2]=0X34,farray[3]=0X42
45.230000

建议使用共同体进行转换,提高系统的稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值