明文和二进制数据有什么区别?

时间:2009-09-16 19:03:41

标签: binary format plaintext

许多语言的功能只处理“明文”,而不是二进制。这是否意味着只允许ASCII范围内的字符?

二进制只是一系列字节,是不是类似于明文,它只是一系列被解释为字符的字节?那么,明文可以存储与二进制相同的数据格式/协议吗?

5 个答案:

答案 0 :(得分:10)

纯文本是人类可读的,二进制文件通常是人类无法读取的,因为它由可打印和不可打印的字符组成。

尝试使用文本编辑器(例如记事本或vim)打开jpeg文件,您就会理解我的意思。

二进制文件通常以优化速度的方式构造,因为不需要解析。 纯文本文件可手动编辑,而不是二进制文件。

答案 1 :(得分:7)

“明文”可以有多种含义。

在这种情况下最有用的一点是,它只是一个二进制文件,按字节顺序组织,特定的计算机系统可以将其转换为它认为是“文本”字符的有限集。

第二个含义,有点连接,是一种限制,所述系统应将这些“文本字符”显示为人类可读的符号,作为可识别字母的成员。通常,不成文的含义是翻译机制是ASCII。

第三个,甚至更具限制性的含义是,该系统必须是“简单”的文本编辑器/查看器。通常暗示ASCII编码。但是,实际上,你,人类,阅读文本以某种时髦格式编码并由专有程序显示,与VI文本编辑器读取ASCII编码文件之间存在极小差异。

在编程环境中,您的编程环境(由OS +系统API +您的语言功能进行了编译)定义了一组“文本”字符,以及它能够读取的一组编码转换为这些“文本”字符。请注意,这可能不一定意味着ASCII,英文或8位 - 例如,Perl可以原生地读取并使用完整的Unicode“字符集”。

要回答您的具体问题,您肯定可以使用“字符”字符串来传输任意字节序列,但需要注意字符串终止约定必须适用。 问题是“处理字符数据”已经存在的函数可能没有任何有用的功能来处理二进制数据。

答案 2 :(得分:4)

通常意味着,语言可以随意将certian控制字符(例如值10或13)解释为逻辑行终止符。换句话说,输出操作可能会在结尾处自动附加这些字符,并且输入操作可能会将它们从输入中剥离(和/或终止在那里读取)。

相比之下,宣传处理“二进制”数据的语言I / O操作通常会包含一个输入参数,用于操作数据的长度,因为没有其他方法(缺少读取文件末尾)知道什么时候完成。

答案 3 :(得分:3)

通常,它取决于语言/环境/功能。

二进制数据始终是:二进制。它无需修改即可转移。

“纯文本”模式可能表示以下一项或多项内容:

  • 字节流被分成行。行分隔符是\ r,\ n或\ r \ n或\ n \ r \ n。有时它依赖于操作系统(如* nix喜欢\ n,而windows喜欢\ r \ n)。可以针对阅读应用调整行结尾
  • 可以调整字符编码。环境可能会检测和/或将源编码转换为应用程序所需的编码
  • 可能应该将其他一些转换添加到此列表中,但此时我再也想不到了

答案 4 :(得分:3)

技术上没什么。纯文本是二进制数据的一种形式。但是,主要区别在于如何存储值。想想如何存储整数。在二进制数据中,它将使用二进制补码格式,可能占用32位空间。在文本格式中,数字将被存储为一系列unicode数字。因此,数字50将以二进制形式存储为0x32(填充以占用32位),但将以纯文本形式存储为“5”0。