为什么我们用32进制或者64进制来表示数据而不是0和1呢?
Why do we use base 32 or base 64 to represent data instead of 0s and 1s?
我最近编写了一个序列化一些数据(java 对象)并将生成的字符串保存在文本文件中的程序。信息以 base 64 序列化,因此数据最终看起来像这样:
rO0ABXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAab3JnLmJ1a2tpdC51dGlsLmlvLldyYXBwZXLyUEfs8RJvBQIA。
我有点理解base 64的意思,但是,既然这是乱码,为什么文本文件或计算机不从头开始显示0和1?如果我正确理解了底层过程,那么计算机上的所有信息无论如何都以 0 和 1 的形式存储在某个地方,因为这是计算机最终存储信息的唯一方式。 base 64 不只是一种读取和解释字节的方式吗?为什么要让我的文本编辑器读取保存在计算机上的字节,将它们转换成字母(最终使文档对我来说更短)然后以上面的形式显示呢?尽管 base 64 导致以一种视觉上更紧凑的方式显示信息,但无论如何没有人可以阅读 base 64 文本并且文件仍然具有相同的精确大小。
Base64 用于通过不理解 and/or 破坏 8 位数据的系统发送 8 位数据。例如大多数较旧的电子邮件系统采用 7 位文本,并将丢弃您的 8 位电子邮件。
b64/b32 不是存储格式。他们大量浪费 space。将一个值编码为 base64 会使它的大小平均增加约 33%。它们是传输格式,以确保您的 8 位数据完好无损地通过 7 位系统。
考虑一个简单的文本序列:abc
。假设是 ASCII 文本,那就是
0x61 0x62 0x63 (hex)
01100001 01100010 01100011 (binary)
97 98 99 (decimal)
当一起塞进一个文件中时,您的位将很简单
011000010110001001100011
如果这个 8 位字节序列通过哑的 7 位传输介质发送,然后重新设置为 8 位系统,则所有关于哪些位属于哪个字节的意义都将丢失。你最终会得到
0110000 1011000 1001100 011
因为接收8bit的系统不会知道原来的数据是8bit的。它会看到来自 7 位系统的位,并将这些位拆分为 7 位序列。现在您的值已被清除:
0110000 1011000 1001100 011 (binary)
48 88 88 corrupt/missing bits (decimal)
30 58 58 corrupt/missing bits (hex)
这些值将对应于 ASCII 字符
RS X X
完全不像您的原文。
我最近编写了一个序列化一些数据(java 对象)并将生成的字符串保存在文本文件中的程序。信息以 base 64 序列化,因此数据最终看起来像这样:
rO0ABXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAab3JnLmJ1a2tpdC51dGlsLmlvLldyYXBwZXLyUEfs8RJvBQIA。
我有点理解base 64的意思,但是,既然这是乱码,为什么文本文件或计算机不从头开始显示0和1?如果我正确理解了底层过程,那么计算机上的所有信息无论如何都以 0 和 1 的形式存储在某个地方,因为这是计算机最终存储信息的唯一方式。 base 64 不只是一种读取和解释字节的方式吗?为什么要让我的文本编辑器读取保存在计算机上的字节,将它们转换成字母(最终使文档对我来说更短)然后以上面的形式显示呢?尽管 base 64 导致以一种视觉上更紧凑的方式显示信息,但无论如何没有人可以阅读 base 64 文本并且文件仍然具有相同的精确大小。
Base64 用于通过不理解 and/or 破坏 8 位数据的系统发送 8 位数据。例如大多数较旧的电子邮件系统采用 7 位文本,并将丢弃您的 8 位电子邮件。
b64/b32 不是存储格式。他们大量浪费 space。将一个值编码为 base64 会使它的大小平均增加约 33%。它们是传输格式,以确保您的 8 位数据完好无损地通过 7 位系统。
考虑一个简单的文本序列:abc
。假设是 ASCII 文本,那就是
0x61 0x62 0x63 (hex)
01100001 01100010 01100011 (binary)
97 98 99 (decimal)
当一起塞进一个文件中时,您的位将很简单
011000010110001001100011
如果这个 8 位字节序列通过哑的 7 位传输介质发送,然后重新设置为 8 位系统,则所有关于哪些位属于哪个字节的意义都将丢失。你最终会得到
0110000 1011000 1001100 011
因为接收8bit的系统不会知道原来的数据是8bit的。它会看到来自 7 位系统的位,并将这些位拆分为 7 位序列。现在您的值已被清除:
0110000 1011000 1001100 011 (binary)
48 88 88 corrupt/missing bits (decimal)
30 58 58 corrupt/missing bits (hex)
这些值将对应于 ASCII 字符
RS X X
完全不像您的原文。