gpt4 book ai didi

C++字节序会影响fstream的读写功能吗?

转载 作者:行者123 更新时间:2023-12-02 09:49:45 24 4
gpt4 key购买 nike

我正在学习如何写入/读取二进制文件,并且我希望我的文件对于任何支持 C++ 17 的机器都是可读的。所以我有一个可怕的想法:如果 read() 和 write() 受到字节序的影响怎么办机器的?

举个例子:
我在一台大端机器上运行这段代码,

#include <iostream>
#include <fstream>
#include <cstdint>

int main() {

std::ofstream Output("Hey.txt", std::ofstream::out | std::ofstream::binary);

if (Output.is_open()) {
int16_t i = 42;
Output.write((const char*)&i, 2);
}

}

然后我把 Hey.txt 传给一个小端机器,然后在机器上运行这段代码,
#include <iostream>
#include <fstream>
#include <cstdint>

int main() {

std::ifstream Input("Hey.txt", std::ifstream::in | std::ifstream::binary);

if (Input.is_open()) {
int16_t i;
Input.read((char*)&i, 2);
std::cout << i << std::endl;
}

}

程序会打印 42 吗?还是 fstream 处理字节序差异?如果没有,有没有办法防止字节序问题?

感谢您的关注。

最佳答案

两个简单的规则:

  • 如果您要将二进制数据写入文件,请记录文件格式。
  • 当您将二进制数据写入文件时,请确保您写入的字节符合文件格式的要求。

  • 如果文件格式说有一个大端格式的 16 位整数,而您编写的代码可以读取或写入它,那么一切都会正常工作。

    不要使用这样的 Actor (char*)&i因为这样字节将保存 native 系统碰巧用于 16 位整数的任何格式,并且甚至不能保证(根据 C++ 标准)在同一系统上运行相同代码时保持稳定。

    关于C++字节序会影响fstream的读写功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61276567/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com