将文本写入二进制文件 - 有什么区别?

时间:2015-03-22 22:08:22

标签: c++ file binary binaryfiles

我正在学习用C ++编写二进制文件。我对结果有点困惑。我们说我有这段代码:

#include<fstream>
#include<string>
using namespace std;

int main(){
    ofstream file;
    string text = "Some text over here";

    file.open("test.bin",ios::out|ios::binary);
    file.write(text.c_str(), text.length());
    file.close();

    return 0;
}

我希望输出文件test.bin在二进制&#34;中是&#34;但是当我在记事本中看到它时,我看到了正常的文字:

Some text over here

我的期望是错的吗?什么使二进制文件和我应该用什么来实现它?

1 个答案:

答案 0 :(得分:4)

最重要的&#34;定义什么单词&#34;二进制&#34; 意味着来自一个数字可以取两个值之一的情况。无论你怎么称呼它们都不严格(&#34; on&#34; /&#34; off&#34;,&#34; 1&#34; /&#34; 0&#34;,&# 34;是&#34; /&#34;无&#34)。重要的是,只有两个州。

牢记核心定义。但是你会发现大量其他习惯用法的单词&#34; binary&#34;在计算机世界中,取决于背景。

作为示例:有些人会将表示可执行映像的文件(例如Windows上的.EXE文件)称为&#34;二进制&#34; 或(&#34;二进制&#34; ,在编译某个代码库时你知道你正在谈论的可执行文件。)

你绊倒了另一个令人困惑的区别,即人们有时会将文件格式称为 &#34; textual&#34; &#34;二进制&#34;。然而,今天的计算机基于始终二进制technically they don't have to be的系统。所以如果&#34; textual&#34;文件最终不是作为二进制位存储在某处, 它们将如何存储? : - /

因此文件格式的标签为&#34; textual&#34;是说它对使用的二进制模式更严格,因此它只会使用那些在某些文本编码中有意义的模式&#34;。这就是为什么这些文件在文本编辑器中加载时看起来可读的原因。

所以&#34;文本文件格式&#34;是所有&#34;文件格式的子集&#34;。有时当人们想要在文本文件子集中引用的东西时,他们会称之为&#34;二进制文件格式&#34;。

充足的混淆空间!但结果是,当你打开文件时,你所做的就是&#34; textual&#34; vs.&#34; binary&#34; C ++中的模式是在加载时仅使用文本编辑器中可能看起来很好的位模式来告诉流你。打开二进制文件要求将所有字节发送到文件 verbatim ,而不是让它尝试并处理新行处理中的跨平台文本文件差异&#34;引擎盖下#34 ;为方便起见。