无法写入二进制文件

时间:2010-03-11 21:59:22

标签: c++

我在C ++中有以下代码。

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ofstream output("Sample.txt", ios::out | ios::binary);

for(int i = 0; i < 10; i++)
{
  output<<arr[i];
}

现在Sample.txt是这样的:

12345678910

“Sample.txt”不应该是二进制文件吗?当我以二进制模式打开流时,为什么不将所有内容都转换为二进制文件。我该怎么办,因为我需要数组中每个元素的二进制文件,然后将其打印到文件中。

4 个答案:

答案 0 :(得分:3)

  

“Sample.txt”不应该是二进制文件吗?

没有。 std::ios::binary所做的是防止将'\n'转换为特定于平台的EOL。它不会跳过数据字节的内部表示与其字符串转换之间的转换。毕竟,这就是溪流的全部意义所在。 (另外,想一想如何在二进制表示中流式传输包含指针的用户定义类型的对象。)

要实际编写对象二进制使用std::ostream::write()。但要注意,结果是特定于平台的。

答案 1 :(得分:0)

二进制模式主要意味着(例如)您编程的新行字符与您的平台认为标记行尾的任何内容之间不会发生转换(例如“\ r \ n”on Windows,马上的“\ r”。)

要实际编写二进制文件,通常使用ofstream.write()

答案 2 :(得分:0)

二进制只意味着换行符不会转换为特定于操作系统的格式。使用int输出ofstream类型的值会将其格式化为十进制数(普通ASCII文本)。

对于二进制的含义,您应该编写char类型的值或使用非格式化函数output.writedocs here)。

答案 3 :(得分:0)

“非文本”中的二进制表示没有像新行等那样进行格式化。

See

  

以二进制模式打开文件流   执行输入和输出操作   独立于任何格式   注意事项。非二进制文件是   称为文本文件,有些   翻译可能由于   格式化一些特殊字符   (如换行和回车   字符)。

它不会为您翻译为01格式。 PC上的所有内容都使用binary格式,但是当您打开文件并使用编辑器读取它时,编辑器会读取二进制数据并为您显示ASCII字符。

相关问题