Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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++ 文件二进制与文本_C++_File - Fatal编程技术网

C++ 文件二进制与文本

C++ 文件二进制与文本,c++,file,C++,File,在某些情况下,我是否必须选择二进制文件而不是文本文件?我用C++作为编程语言? 例如,如果我必须存储一些大的文本文件,最好使用文本文件还是二进制文件? 编辑 目前,该文件不要求可读。是否存在一些性能差异、安全性差异等? 编辑 很抱歉,省略了其他要求(感谢Carey Gregory) 要保存的记录采用ascii编码 文件必须加密(AES) 这台机器可以随时关机。所以我必须努力防止错误 我必须知道,如果文件在程序外更改,我想我将使用文件的sha1摘要 二进制文件只供机器解释,而文本

在某些情况下,我是否必须选择二进制文件而不是文本文件?我用C++作为编程语言?

例如,如果我必须存储一些大的文本文件,最好使用文本文件还是二进制文件?

编辑

目前,该文件不要求可读。是否存在一些性能差异、安全性差异等?

编辑

很抱歉,省略了其他要求(感谢Carey Gregory)

  • 要保存的记录采用ascii编码
  • 文件必须加密(AES)
  • 这台机器可以随时关机。所以我必须努力防止错误
  • 我必须知道,如果文件在程序外更改,我想我将使用文件的sha1摘要
二进制文件只供机器解释,而文本文件也可由人打开并解释其内容


因此,这取决于您是否希望您的文件能够被人读取

这取决于很多因素。我现在可以想到两个:

  • 您是否要求该文件可供人类阅读

  • 压缩是一个因素吗?一个10位数字至少需要10个字节作为文本,但可能需要4到2个字节作为二进制


所有文件都是二进制文件;其中的数据是某些信息的二进制表示。如果必须存储大量文本,则文件将包含该文本的二进制表示形式。“二进制文件”和“文本文件”的区别在于,创建后者需要在保存数据之前将数据转换为文本形式。这通常是为了让人类能够阅读它

在存储供计算机使用的数据时,通常会区分二进制和文本。通常,此数据不是文本-它可能是数字配置值的列表,例如:
1、2、3

如果以文本格式存储,则文件可能包含人类可读的数字列表,如果在记事本中打开文件,则每行可能会看到一个数字。但实际上您在这里保存的不是二进制值
1,2,3
——而是一个字符串
“1\n2\n3\n”
。请注意,此字符串的长度为6个字符,二进制值(假设为ASCI)实际上是
49、10、50、10、51、10


如果相同的数据以二进制格式存储,则将数字存储在最小的有用空间中,并将文件作为单个字节写入,这些字节通常只能由创建它们的代码读取。在记事本中打开此文件可能会显示垃圾字符,因为数据作为文本没有意义。在本例中,您将使用实际值
{1,2,3}
-保存一个字节数组,甚至是一个嵌入了三个值的单个字节。这可能比人类可读的等效文件小得多。

二进制文件与所有其他文件一样存储字节序列。您可以存储数字值,如每4个字节的整数、每单字节的字符,甚至可以存储序列化的类对象以及任何您想要的内容


当你知道如何读取二进制文件时(即你知道其中存储了什么),你就可以从中提取所有信息。但是,文本文件使用UTF8、ANSI等文本编码,用于对文本编辑器处理的文本字符进行编码。

一般来说,定义文本格式并使用它。太多了 更容易开发和调试,并且更容易查看 如果它不起作用就会出问题

如果您发现文件变得太大,或者 很多时间在电线上传输,考虑压缩它们。 压缩文本文件通常比您使用的文件小 二元的。或者考虑较少冗长的文本格式;这是可能的 要可靠地传输数据的文本表示形式,请使用 比XML使用的字符少得多

最后,如果您最终不得不使用二进制,请尝试选择 现有格式(例如Google的协议块)或您的基础 现有格式上的格式。请记住:

  • 二进制文件比文本要多得多,因为实际上
    必须写入所有
    文本文件中存储的所有数据都是人类可读的图形字符。每行数据都以新行字符结尾。
    在二进制文件的情况下,数据以与存储在内存中相同的格式存储。没有行或新行字符。有一个文件结束标记


    此外,二进制文件存储在0和1中,内存效率更高。

    为什么不简化问题,告诉我们您的要求是什么?如果您的数据是ASCII文本,那么您为什么要将其存储为其他内容?除非您有诸如压缩或加密之类的要求,否则没有理由更改数据的编码,并且有很多理由不这样做。另一个要求是加密(AES)Wow,这是一个需要忽略的主要要求。对于第二个pont,一位数字将占用2个字节作为文本(因为它可能需要分隔符),“但可能很容易将4作为二进制。”詹姆斯坎茨不想吹毛求疵,但你假设的是一个单字节字符集,它不适用于地球上一半以上的人口。使用Unicode时,至少需要4个字节,最多需要8个字节来存储一个数字加分隔符。@请仔细记录所有常用数字和大多数常用分隔符都是UTF-8中的一个字节。你不会再写其他东西了。@JamesKanze假设他不需要支持CJK语言,这是真的,但如果他需要,他将需要UTF-16。@CareyGregory为什么他需要UTF-16?除非您确定该文件将仅在本地使用,即在写入该文件的计算机上使用,否则您永远不会真正地将UTF-16读写到文件中。用于数据传输的统一约定(今天,仍然有许多使用ISO 8859或JIS的遗留代码)是UTF-8,UTF-8经过精心设计,因此所有的字符