c++ - 浮点字节顺序

标签 c++ floating-point fstream endianness

我正在使用 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/

相关文章:

c++ - 程序不会在 exit() 函数之前打印行?

c++ - Xcode C++ 中文件流/fstream 的问题

c++ - OpenJPEG 的 opj_encode 是段错误

c++ - 在笛卡尔平面上给定N条线。如何有效地找到最底线的交点?

c# - 在 SQL Server 中保存浮点值

java - 为什么我可以将 float 传递给 Double 的构造函数?

c++ - 为什么以下内容无法编译?

c++ - 方向传感器的 Windows Sensor API C++ COM 集成未在 Windows 10 上定期更新

python - 如何将 float 限制在限制以下?

c++ - 在 C++ windows 8.1 和 msvc 2013 中打开文本文件