我正在使用 std::fstream
在 C++ 中写入和读取二进制数据 (std::ios::binary
) - 这包括整数和浮点值。虽然我的代码适用于我自己的体系结构,但我不想确保它是可移植的,即在我的机器上编写的二进制文件仍应在具有不同字节顺序的机器上正确读取。所以我的想法是,我将在二进制文件的第一个字节处添加一个值,该值将指示文件的字节顺序。
由于无法保证整数和 float 的字节顺序相同,我需要分别获取这两种数据类型的信息。虽然使用指针算法获得整数的字节序相当简单,但我不知道如何在运行时获得 float 的字节序。有什么想法吗?
我的代码如下:
#include <cstdint>
#define INT_LITTLE_ENDIAN 0x01u
#define INT_BIG_ENDIAN 0x02u
#define FLOAT_LITTLE_ENDIAN 0x04u
#define FLOAT_BIG_ENDIAN 0x08u
uint8_t getEndianess(){
uint8_t endianess = 0x00;
uint16_t integerNumber = 0x1;
uint8_t *numPtr = (uint8_t*)&integerNumber;
if (numPtr[0] == 1) {
endianess |= INT_LITTLE_ENDIAN;
}else {
endianess |= INT_BIG_ENDIAN;
}
/* TODO: check endianess for float */
return endianess;
}
最佳答案
如果我们假设 float 的最高位是符号(如 IEEE),而它们不是,例如,像二进制补码,您可以轻松地生成一个数字,将其取反并检查第一个或最后一个字节是否发生了变化。
关于c++ - 浮点字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763790/