目录
在数据传输过程中,基本上都是以字节来传输,为了防止浮点数传输时发生精度损失,可以将浮点数转换为字节数组传输。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char u8;
typedef unsigned long u32;
typedef union {
float fdata; //4 bytes
u32 ldata; //4 bytes
}FL_t;
//浮点转4字节
static void Float_2_Bytes(float f, u8 bytes[])
{
FL_t fl;
fl.fdata = f;
bytes[0] = (u8)fl.ldata;
bytes[1] = (u8)(fl.ldata >> 8);
bytes[2] = (u8)(fl.ldata >> 16);
bytes[3] = (u8)(fl.ldata >> 24);
}
//4字节转回浮点
static void Bytes_2_Float(float* f, u8 bytes[])
{
FL_t fl;
fl.ldata = 0;
fl.ldata = bytes[3];
fl.ldata = (fl.ldata << 8) | bytes[2];
fl.ldata = (fl.ldata << 8) | bytes[1];
fl.ldata = (fl.ldata << 8) | bytes[0];
*f = fl.fdata;
}
int main() {
//用之前要先检查一下机器的unsigned long是不是4个字节
printf("float size: %d, ulong size: %d\n",sizeof(float), sizeof(unsigned long));
float f = 123456.789f;
u8 bytes[4] = { 0x00 };
printf("float data = %.3f\n", f);
Float_2_Bytes(f, bytes);
f = 789.1234f;
printf("changed float data = %.4f\n", f);
Bytes_2_Float(&f, bytes);
printf("float data = %.3f\n", f);
system("pause");
return 0;
}
结果:
以上均为个人学习心得,如有错误,请不吝赐教~
THE END