我有使用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在另一个系统上逐字恢复,无论人们在他们的系统上使用哪种语言环境配置?我会做出以下假设:
如果无法保证默认语言环境在某些系统配置(我不知道,阿拉伯语或其他东西)上未经修改的情况下通过这些内容,那么使用C++编写二进制文件的最佳方法是什么?