1、浮点数转十六进制
将浮点数转换为字节数组(byte array),有两种方法。
a、使用类型转换
float a = 0.156;
unsigned char byte_arr[sizeof(float)];
unsigned char* p = (unsigned char*)&a;
for (int i=0; i<sizeof(float); i++) {
byte_arr[i] = *(p+i);
}
这里,我们首先定义了一个与浮点数占用的内存空间大小相同的 unsigned char 数组 byte_arr。接下来,我们通过将浮点数的地址强制转换为指向 unsigned char 类型的指针,将浮点数 a 的每个字节逐个复制到 byte_arr 中。
b、使用memcpy 函数
float a = 0.156;
unsigned char byte_arr[sizeof(float)];
memcpy(byte_arr, &a, sizeof(float));
这里,我们同样定义了一个与浮点数占用的内存空间大小相同的 unsigned char 数组 byte_arr。再利用 memcpy 函数,将浮点数 a 的内存内容复制到 byte_arr 中。由于 memcpy 函数的第二个参数需要一个指向 void 类型的指针,因此我们使用了取地址符 & 对浮点数进行了取地址操作。
2、十六进制转浮点数
a、使用类型转换
unsigned char byte_arr[] = {0x77, 0xBE, 0x1F, 0x3E};
float a;
unsigned char* p = (unsigned char*)&a;
for (int i=0; i<sizeof(float); i++) {
*(p+i) = byte_arr[i];
}
这里,我们首先定义了一个字节数组 byte_arr,它的值为 0.156 的十六进制。接下来,我们声明一个浮点数变量 a,并将其地址强制转换为指向 unsigned char 类型的指针 p。然后,我们通过遍历字节数组 byte_arr,逐个复制字节到浮点数 a 的内存空间中,从而将字节数组转换为浮点数。
b、使用memcpy 函数
unsigned char byte_arr[] = {0x77, 0xBE, 0x1F, 0x3E};
float a;
memcpy(&a, byte_arr, sizeof(float));