Base 编码家族:Base16 编码

参考

项目 描述
搜索引擎 BingGoogle
AI 大模型 文心一言通义千问讯飞星火认知大模型ChatGPT
Tuts+ Base What? A Practical Introduction to Base Encoding
RFC 文档 RFC4648

环境

项目 描述
绘图工具 draw.io 21.7.5

Base 编码

Base 的含义

计数系统

Base 这个词在数学中通常用来描述计数系统的 基数基数即计数系统中用于表示数字的不同符号的数量

举个栗子

  1. 二进制计数系统
    二进制计数系统中仅使用两个符号表示数字,即 01,故二进制计数系统可以使用 Base2 来进行表示。
  2. 十进制计数系统
    十进制计数系统中仅使用十个符号表示数字,即 0 ~ 9,故十进制计数系统可以使用 Base10 来进行表示。
  3. 十六进制计数系统
    十六进制系统中仅使用十六个符号表示数字,即 0 ~ 9 及 a ~ f,故十六进制计数系统可以使用 Base16 来进行表示。
编码系统

Base 在 计算机编码系统 中则用于表示该编码系统所使用的字符集的大小。Base 描述了该系统的基数,而后面的数字表示这个 基数的具体值。这样的命名方法 直观地 告诉我们这个编码系统使用了多少种不同的字符来表示数据。

举个栗子

  1. Base16 编码系统
    Base16 编码系统中使用 十六个字符 来对数据进行编码。
  2. Base64 编码系统
    Base64 编码系统中使用 六十四个字符 来对数据进行编码。

为什么需要 Base 编码?

Base 编码能够将 二进制数据转换为文本表示,以便在不同的环境中使用。

项目 描述
便于数据的查看 二进制数据可能包含不能直接打印或显示的字符。Base 编码可以 将这些非打印字符转换为可打印的字符集,从而使数据更容易处理和查看
字符集限制 许多传输协议和系统只接受特定的字符集,如 ASCII。Base64 和其他 Base 编码可以 将任意的二进制数据转换为这些协议和系统可接受的格式
数据完整性 在某些情况下,数据传输可能会导致特定的二进制值被解释为 控制字符等特殊字符,从而损害数据的完整性。使用 Base 编码可以确保数据在传输过程中不会被误解释或损坏。

ASCII 编码

ASCII(American Standard Code for Information Interchange) 是一种字符编码标准,用于 将文本字符映射到数值ASCII 最早?在计算机领域中广泛使用,它定义了 128 个不同的字符,包括 控制字符(如换行和回车) 以及 可打印字符(如字母、数字、标点符号等)。ASCII 定义的每个字符都被分配了一个 唯一的整数值,范围从 0127

注:

  1. 世界上存在许多的编码方案,但这些方案大多是 基于 ASCII 编码进行扩展的?,因此 ASCII 编码也被认为是 字符编码的基础
  2. 扩展 ASCII 字符集利用了单个字节中的空余二进制位,将 ASCII 字符提升到了 256 个之多。

Base16 编码

概念

Base16 编码是一种将二进制数据转换为文本表示的编码方式,它使用 16个字符中的一个 来表示 二进制数值中的 4 个二进制位
在 Base16 编码中,被用于编码的字符与十六进制数值所使用的字符相同,故 Base16 编码又被称为 十六进制编码

Base16 字符集

Base16 字符集 是指用于 Base16 编码 的字符集,由 0 ~ 9 和 A ~ F 共十六个字符组成。

Base16 编码原理

编码

  1. 获取字符在其所属编码系统中的二进制表示

由于 编码是基于字符在其所属编码系统中对应的二进制数进行的,故在对字符进行编码前需要先获取该字符的二进制表示。

  1. 将二进制数值按照一定的规则进行拆分(方便后续第三步的进行)

在计算机中,一个字节由 8 个二进制位 组成,每一个二进制位可以是 01。当我们使用 十六进制 来表示这 8 位时,我们实际上是将这 8 个二进制位 拆分为两个 4 位二进制数。每个 4 位二进制数部分可以表示 从 0 到 15 2 4 2^4 24)的数字,这恰好对应于 Base16 中的 16 个字符。

  1. 由二进制数值到 Base16 编码

将拆分的 4 个二进制位转化为十进制数值(便于和 Base16 字符集进行对比,如果对二进制比较熟悉可以省略这一步) 并依据 Base16 编码表进行 对比替换

举个栗子

ASCII 文本(通过 ASCII 在计算机中存储的字符组成的文本) Hel 在经过 Base16 编码后得到结果 48656C

注:

  1. 在将数据转化为 Base16 编码的过程中,获取其 ASCII 值并不是必须的。除 ASCII 字符外的字符(如中文)也可以进行 Base16 编码,由于 编码是针对二进制数据进行的,故对字符进行编码前首先得先知道该字符 在其所使用的编码系统中使用怎样的二进制数据进行存储

  2. 对使用 Base16 进行编码后的数据可以通过 Base16 编码的逆过程 实现 Base16 的解码。

Base16 编码特点

体积膨胀

由于在对字符进行 Base16 编码的过程中,使用 一个字节存储的 ASCII 字符需要使用两个同属于 ASCII 字符的 Base16 字符进行表示。故在将文本进行 Base16 编码后,编码后得到的文本将占据原来的 两倍 之多。