将二进制数据(std::string)写入std::ofstream?

3

我有一个包含二进制数据的std::string对象,需要将其写入文件。使用ofstream f("name"); f << s;会有问题吗?我需要确保读取的数据与原始数据完全相同。

当然可以使用fwrite(s.c_str(), s.size(), 1, filep),这两种方法有什么优缺点吗?


1
虽然你所做的是完全有效的(不要忘记以二进制模式打开ofstream..无论你的数据是否为二进制,坦白地说),但我会使用vector<char>来增加舒适感。你没有使用的原因是什么? - Lightness Races in Orbit
@Tomalak:我正在使用一组接受和返回string的转换器类。 string似乎是操作缓冲区的便捷接口,例如将其附加/替换到另一个内容等。我曾经考虑过将binaryString定义为basic_string<unsigned char>,但这需要太多重构时间,而当时我没有那个时间。但是我能否使用vector<char><<运算符? - davka
不用。但是我也不想使用<<来处理二进制数据,因为我的大脑会将其读作“格式化输出”,而这并不是你要做的事情。再次强调,这是完全有效的,但我不想让我的大脑感到困惑。:)本地追加肯定是有用的。 - Lightness Races in Orbit
@TomalakGeret'kal等,我能否引起您对这个相关问题的关注:https://dev59.com/7V3Va4cB1Zd3GeqPBITH - HostileFork says dont trust SE
1个回答

7
只要你以二进制方式打开ofstream,就应该没问题。
ofstream f("name", ios::binary | ios::out); 
f << s;

不要忘记以二进制模式打开文件,当您读取数据时也需要这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接