【发布时间】:2014-10-14 04:38:43
【问题描述】:
我是 C++ std::stream 的新手,我正在做一些测试。我有这个简单的代码:
int i = 10;
char c = 'c';
float f = 30.40f;
std::ofstream out("test.txt", std::ios::binary | std::ios::out);
if(out.is_open())
{
out<<i<<c<<f;
out.close();
}
由于流以std::ios::binary 打开,我希望在test.txt 文件中具有i、c 和f 的二进制表示,但我有10c30.4。
你能告诉我我做错了什么吗?
【问题讨论】:
-
来自cplusplus.com/reference/fstream/ofstream/ofstream binary (binary) 将流视为二进制而不是文本。
-
好的,然后是文本文件流与二进制文件流的 POSIX 定义 :) (提示:为什么将 text 写入二进制文件会导致其他结果文字?)
-
@Felics:该标准没有指定“二进制”的实际含义。事实上,在某些平台上它没有效果(例如在 POSIX 上)。
-
非常清楚:+1 这个问题。我认为有趣的是发现documentation on this 非常粗略。这显然是“假设”是显而易见的。更多的人可能会感到困惑,这使得这是一个完美的Stack Overflow 候选人。
-
@Felics:你的最后一句话毫无意义。 ISO 表示使用
binary|out打开fstream与使用"wb"模式的fopen等效。现在,当你说“我有预期的结果”时,它意味着你调用了fwrite,它对应于ostream::write。但是您的代码在这里使用operator <<,它对应于例如fprintf(out, "%d", i)表示整数。