经验分享
我在做单片机程序时,有这么个要求,需要把上位机下发的浮点型数据保存下来,存放到记事本里面,上电的时候再将保存的数据读出来。这里,就要考虑如何将浮点型数据进行转换保存。
如下的结构体变量:
typedef struct
{
float a;
float b;
float c;
float d;
// short e[8];
}Float2HexTest;Float2HexTest Float2HexData;//定义一个结构体变量
对其进行赋值: Float2HexData.c = 10.42;
那如果对其直接进行输出可以得到其十六进制格式吗?
printf("%x\n",Float2HexData.c);
看结果,显然是不行的。
那么我们试着通过数据类型转换,然后在进行输出显示。在32位机器中,float类型占4个字节。那我们定义一个int变量
int temp = 0;
然后我们进行内存块复制,我们知道,不同数据类型,相同字节大小的变量,他们的内存存储完全一致。如下:
memcpy(&temp,&Float2HexData.c,sizeof(float));
随后,我们以十六进制格式化输出整数类型数据temp;
printf("0X%X\n",temp);
结果如下:
我们通过将所得数与工具转化所得数做对比:
结果一致,我们可以通过这个思路将结果进行后续处理了。