我在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”不应该是二进制文件吗?当我以二进制模式打开流时,为什么不将所有内容都转换为二进制文件。我该怎么办,因为我需要数组中每个元素的二进制文件,然后将其打印到文件中。
答案 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.write
(docs here)。
答案 3 :(得分:0)
“非文本”中的二进制表示没有像新行等那样进行格式化。
See:
以二进制模式打开文件流 执行输入和输出操作 独立于任何格式 注意事项。非二进制文件是 称为文本文件,有些 翻译可能由于 格式化一些特殊字符 (如换行和回车 字符)。
它不会为您翻译为0
和1
格式。 PC上的所有内容都使用binary
格式,但是当您打开文件并使用编辑器读取它时,编辑器会读取二进制数据并为您显示ASCII字符。