【问题标题】:Writing text to binary file - what's the difference?将文本写入二进制文件 - 有什么区别?
【发布时间】:2015-05-25 20:43:06
【问题描述】:

我正在学习用 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 是“二进制”,但是当我在记事本中查看它时,我看到的是普通文本:

Some text over here

我的期望错了吗?是什么让事物成为二进制,我应该用什么来实现它?

【问题讨论】:

  • 技术上,普通文本二进制。您应该期望得到与您输入的内容相同的内容。其中包含文本字符的二进制文件和具有相同字符的文本文件之间的唯一区别是......好吧,什么都没有。当然,除了可以在二进制文件中放入不可打印的字符。

标签: c++ file binary binaryfiles


【解决方案1】:

“二进制”一词的最“重要”定义意味着仅来自于数字可以取两个值之一的情况。无论您如何称呼它们,严格来说都无关紧要(“on”/“off”、“1”/“0”、“yes”/“no”)。重要的是只有两种状态。

牢记核心定义。但是您会发现计算机世界中“二进制”一词的大量其他惯用用法,具体取决于上下文。

例如:有些人将表示可执行映像的文件(例如 Windows 上的 .EXE 文件)简单地称为 "a binary" 或 ("the binary" ,当编译某个代码库时,你知道你要谈论的是什么可执行文件。)

您遇到了另一个令人困惑的区别,即人们有时将文件格式称为“文本”“二进制”。然而,今天的计算机基于始终二进制(technically they don't have to be)的系统。因此,如果“文本”文件最终没有作为二进制位存储在某处,那么 它们将如何存储呢? :-/

所以 文件格式 被标记为“文本”的真正含义是说它“对它使用的二进制模式更加严格,因此它只会使用那些在某些文本编码中有意义”。这就是为什么当您在文本编辑器中加载这些文件时它们看起来可读的原因。

因此,“文本文件格式”是所有“文件格式”的子集。有时,当人们想要引用该文本文件子集中的内容时,他们会将其称为“二进制文件格式”。

有很多混乱的空间!但结果是,当您在 C++ 中以“文本”与“二进制”模式打开文件时,您所做的只是告诉流您不是,只使用可能看起来不错的位模式加载时在文本编辑器中。以二进制打开要求将所有字节发送到文件逐字,而不是让它尝试在“幕后”处理换行符时处理跨平台文本文件的差异,以方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2011-08-27
    • 2012-10-03
    • 2015-11-29
    • 2011-07-13
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多