Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在二进制模式下使用格式化IO操作?_C++_C++11_Binary_Iostream - Fatal编程技术网

C++ 在二进制模式下使用格式化IO操作?

C++ 在二进制模式下使用格式化IO操作?,c++,c++11,binary,iostream,C++,C++11,Binary,Iostream,在二进制模式下使用格式化IO操作有什么问题吗,特别是当我只处理文本文件时 : 对于二进制文件,使用提取和插入运算符(>)以及诸如getline之类的函数来读取和写入数据是不高效的,因为我们不需要格式化任何数据,而且数据很可能不是按行格式化的 : 通常,对于二进制文件i/o,您不使用传统的面向文本的>运算符!这是可以做到的,但这是一个高级主题 “高级主题”的本质让我质疑这两者的混合。有一个搜索和告诉功能,可以通过打开二进制模式解决。与文本模式相比,在二进制模式下使用>是否存在任何问题,或者如果在二

在二进制模式下使用格式化IO操作有什么问题吗,特别是当我只处理文本文件时

:

对于二进制文件,使用提取和插入运算符(>)以及诸如getline之类的函数来读取和写入数据是不高效的,因为我们不需要格式化任何数据,而且数据很可能不是按行格式化的

:

通常,对于二进制文件i/o,您不使用传统的面向文本的>运算符!这是可以做到的,但这是一个高级主题

“高级主题”的本质让我质疑这两者的混合。有一个搜索和告诉功能,可以通过打开二进制模式解决。与文本模式相比,在二进制模式下使用>是否存在任何问题,或者如果在二进制模式下打开,是否必须始终使用未格式化IO,我只需要解释没有为我隐式删除/添加的回车(\r),但这就是要解释的全部内容吗

使用二进制格式的格式化IO操作是否有问题 模式,特别是当我只处理文本文件时

我只需要解释不正确的回车(\r) 为我含蓄地删除/添加

如果您想要或需要数据中的
\r
,您可能正在处理文本/字符串。为此,您不需要使用二进制文件。尽管您可以在二进制模式下打开文本文件以快速扫描换行符,例如(行数),而无需执行效率较低的
readline()

二进制文件用于直接存储二进制值(主要是数字或数据结构),无需将其转换为文本并再次转换为二进制

二进制文件的另一个优点是不需要进行任何解析。您可以直接访问文件中的所有数据(假设数据以结构良好的方式存储)

例如:如果您需要存储每个包含5个32位数字的记录,您可以将这些记录以其本机二进制格式直接写入二进制文件(转换和解析不会浪费时间)。例如,要在以后读取记录nr 1000,您可以
直接搜索
位置5 x 4 x(1000-1),然后从那里读取20字节的记录。另一方面,对于文本文件,您需要从文件的开头开始扫描每个字节,直到您计算了1000行(也可能是不同长度的)

您可以直接使用
read()
write()
(或
fread()
/
fwrite()
)(尽管
也可以用于具有可变长度的对象)

二进制文件也应该有一个包含一些基本信息的头文件。有关这方面的详细信息,请参阅。

文件的二进制模式意味着在读取或写入文件时不会发生翻译(
ios::binary
)。一种常见的翻译是行尾。这与使用
istream::read
ostream::write
直接读取和写入未格式化数据不同。“二进制文件还应具有包含一些基本信息的头。”在某些情况下。把这作为一条普遍的规则,充其量是乐观的。