小编The*_*ine的帖子

使用C++编写二进制文件:默认语言环境是否重要?

我有使用fstream操作二进制文件的代码,其中设置了二进制标志并使用未格式化的I/O函数进行读写.这在我曾经使用的所有系统上都能正常工作(文件中的位完全符合预期),但这些基本上都是美国英语.我一直在想这些字节是否可能被不同系统上的codecvt修改.

听起来像标准说使用无格式I/O的行为与使用sputc/sgetc将字符放入streambuf相同.这些将导致streambuf中的溢出或下溢函数被调用,并且听起来这些函数会导致某些代码转换(例如,参见c ++标准中的27.8.1.4.3).对于basic_filebuf,此编解码器的创建在27.8.1.1.5中指定.这使得结果看起来将取决于basic_filebuf.getloc()返回的内容.

所以,我的问题是,我可以假设在一个系统上使用ofstream.write写出的字符数组可以使用ifstream.read在另一个系统上逐字恢复,无论人们在他们的系统上使用哪种语言环境配置?我会做出以下假设:

  1. 该程序使用默认语言环境(即程序本身根本不更改语言环境设置).
  2. 系统都有CHAR_BIT 8,每个字节内的位顺序相同,存储文件为八位字节等.
  3. 流对象具有二进制标志集.
  4. 在此阶段,我们无需担心任何字节差异.如果要将数组中的任何字节解释为多字节值,则将在稍后阶段根据需要处理字节序转换.

如果无法保证默认语言环境在某些系统配置(我不知道,阿拉伯语或其他东西)上未经修改的情况下通过这些内容,那么使用C++编写二进制文件的最佳方法是什么?

c++ binary locale fstream

8
推荐指数
1
解决办法
811
查看次数

标签 统计

binary ×1

c++ ×1

fstream ×1

locale ×1