参考博客:十六进制转浮点数的通用方法
0,说明:这里不介绍原理,只记录C/C++语言简便的转换方法。
1,字节数组转浮点数(单精度)。指针法
c/c++: float 类型变量 占 4 个 byte,
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char v_byte[4] = {0xC3, 0xF5, 0x48, 0x40};
float v_float = *((float *)v_byte);
printf("v_float = %f", v_float);
return 0;
}
运行结果:
2, 浮点数(单精度)与 16进制字节数组 互相转换。使用共用体:union
#include <stdio.h>
#include <stdlib.h>
typedef union union_MEM32
{
float fv;
struct
{
unsigned char _0; // LSB
unsigned char _1;
unsigned char _2;
unsigned char _3; // MSB
}uint8;
}uMEM32;
int main()
{
//test 01 ,常量:π=3.14...
uMEM32 value1;
value1.fv = 3.14;
printf("test 01: float->bytes: 0x%X 0x%X 0x%X 0x%X\n", value1.uint8._0, value1.uint8._1, value1.uint8._2, value1.uint8._3);
//test 02,自然常数:e=2.71...
uMEM32 value2;
value2.uint8._0 = 0xA4;
value2.uint8._1 = 0x70;
value2.uint8._2 = 0x2d;
value2.uint8._3 = 0x40;
printf("test 02: bytes->float: %f\n", value2.fv);
return 0;
}
运行结果: