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

Rob*_*cks 16 format binary plaintext

许多语言都具有仅处理"明文"而非二进制的功能.这是否意味着只允许ASCII范围内的字符?

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

Fed*_*oca 10

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

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

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

  • @presleyster和fbrereto:见http://meta.stackexchange.com/questions/9134/jon-skeet-facts (6认同)
  • 问题是二进制文件没有换行符,所以这很难,但并非不可能. (2认同)

DVK*_*DVK 7

"明文"可以有多种含义.

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

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

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

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

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


T.E*_*.D. 5

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

相比之下,宣传对“二进制”数据进行操作的语言 I/O 操作通常会包含一个输入参数,用于表示要操作的数据长度,因为没有其他方法(除了读取文件末尾之外)来知道何时进行操作。已经完成了。

  • 这取决于语言。当然,在艾达身上。在 C 中,唯一的方法是查找行终止符 (ASCII 0)。这意味着您无法使用“ASCII”I/O 例程将该值输出到文件中,但可以使用基于长度的“二进制”例程。 (2认同)