C语言中IEEE 754浮点数的字节流转换
C语言中IEEE 754浮点数的字节流转换
IEEE 754是一种用于表示浮点数的标准,常用于在程序间或网络通讯中传输浮点数值。虽然IEEE 754本身不是通讯协议,但它定义了浮点数的字节级表示方法,为数据交换提供了基础。
以下C代码演示了如何将浮点数转换为IEEE 754格式的字节流,以及如何将字节流转换回浮点数:
#include <stdio.h>
#include <stdint.h>
// 将float类型的数据转换为IEEE 754格式的字节流
void floatToBytes(float value, uint8_t* bytes) {
uint32_t* ptr = (uint32_t*)&value;
*bytes++ = (*ptr >> 24) & 0xFF;
*bytes++ = (*ptr >> 16) & 0xFF;
*bytes++ = (*ptr >> 8) & 0xFF;
*bytes++ = *ptr & 0xFF;
}
// 将IEEE 754格式的字节流转换为float类型的数据
float bytesToFloat(uint8_t* bytes) {
uint32_t value = (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
return *(float*)&value;
}
int main() {
float floatValue = 3.14;
uint8_t byteArray[4];
// 测试floatToBytes函数
floatToBytes(floatValue, byteArray);
printf('浮点数转字节流:0x%02X 0x%02X 0x%02X 0x%02X\n',
byteArray[0], byteArray[1], byteArray[2], byteArray[3]);
// 测试bytesToFloat函数
float convertedValue = bytesToFloat(byteArray);
printf('字节流转浮点数:%f\n', convertedValue);
return 0;
}
这段代码首先定义了两个函数:floatToBytes 将浮点数转换为字节流,bytesToFloat 将字节流转换回浮点数。 然后,程序演示了如何使用这两个函数进行转换。
需要注意的是,字节序(大端序或小端序)会影响字节流的排列顺序。 在进行数据传输时,发送方和接收方必须使用相同的字节序,否则会导致数据解析错误。 请根据你的具体需求调整字节序。
原文地址: https://www.cveoy.top/t/topic/ifc 著作权归作者所有。请勿转载和采集!