如何在 C 中以大端顺序将 int32_t 的 4 个字节写入二进制文件?

Fel*_* An 3 c endianness

我想int32_t以大端顺序将 an 的 4 个字节写入二进制文件。我fwrite()直接使用指向 my 的指针int32_t,它有些工作,但问题是我的整数是按小端顺序写入的,首先写入最小的字节。例如,如果我写:

int32_t specialInt = 262;
fwrite(&specialInt, 4, 1, myFile);
Run Code Online (Sandbox Code Playgroud)

我用十六进制编辑器打开它,我看到:

06 01 00 00 ...
Run Code Online (Sandbox Code Playgroud)

这与我想要的方式相比是倒退的。我想:

00 00 01 06 ...
Run Code Online (Sandbox Code Playgroud)

我应该如何让我的int_32t顺序处于大端顺序?是否有一个内置的 C 库函数可以按正确的顺序获取字节,或者我应该使用将memcpy()字节放入临时字符数组中,然后将字节一一向后写入文件中?

Fel*_* An 6

感谢 pmg 在评论中写下答案:

假设CHAR_BIT == 8

unsigned char value[4];
value[0] = (uint32_t)specialInt >> 24;
value[1] = (uint32_t)specialInt >> 16;
value[2] = (uint32_t)specialInt >> 8;
value[3] = (uint32_t)specialInt;
fwrite(value, 4, 1, myFile);
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:无论计算机的字节序如何,这都有效。 (4认同)
  • 作为奖励,它还可以在没有各种第三方木偶库的情况下工作,这些库的查找/开始工作时间比写下这个简单、可读的代码所需的时间长十倍。 (3认同)