base系列编码

Base 系列编码是一种将数据转换为不同基数的编码方式。它们是常见的编码方式,常用于将数据表示为可打印字符序列或进行数据传输。

1.Base16

也被称为十六进制(Hexadecimal),是一种常见的数值表示方式,使用 16 个字符来表示数字 0 到 15。这些字符通常是 0-9 和 A-F(或 a-f),分别表示数字 0 到 9 和十六进制的 A 到 F(或 a 到 f)。

编码的原理如下:

       将待编码的数据分割成每 4 个位一组(通常是一个字节)。

        将每组 4 个位转换为对应的十六进制字符。每个位的取值范围是 0 到 15,分别用 0-9 和 A-F(或 a-f)表示。

eg . 一个二进制数据:01001101 01100001 01101110(对应 ASCII 码为 "Man")。

        将数据分组为 每 4 个位一组:0100 1101 0110 0001 0110 1110。

         将每组 4 个位转换为对应的十六进制字符:4D 61 6E。

2.Base32

用于将二进制数据转换为可打印字符序列。与 Base64 不同,Base32 使用 32 个不同的字符来表示数据,因此编码后的结果比 Base64 更长,但它可以更好地适应某些场景的需求,例如在文件名中使用。

编码的原理如下:

    1.将待编码的数据分割成每 5 个字节一组(40 位)。

     2.将每组 40 位的数据划分为 8 个 5 位的片段。

     3.将每个 5 位的片段转换为对应的 Base32 字符。Base32 字符集包含 32 个字符,通常是 A-Z 和 2-7,用于表示不同的值。

    4.如果最后一组数据不足 5 个字节,会进行特殊处理来填充数据,确保数据长度为 5 的倍数。通常使用 "=" 字符进行填充。

eg.

01001101 01100001 01101110 00110001 00110010(对应 ASCII 码为 "Man12")。

    1.将数据分组为每 5 个字节一组:01001101 01100001 01101110 00110001 00110010。

    2.将每组 40 位的数据划分为 8 个 5 位的片段:01001 10110 00010 11000 01100 01010。

   3.将每个 5 位的片段转换为对应的 Base32 字符:JW2CIKA。

   4.最后加上填充字符 "=",如果需要的话,得到最终的 Base32 编码结果为 "JW2CIKA="。

3.Base58

Base58 编码通常用于比特币和其他加密货币的地址表示,以及其他需要短字符长度和可读性的应用。

编码的原理如下:

      1'定义一个包含 58 个字符的字符集,通常是由除去容易混淆的字符(如 0、O、I、l)和不包含大小写敏感的字母(如 A、a、B、b)组成的集合。

     2.将待编码的数据转换为一个大整数。

     3.使用大整数除以 58,将结果的余数映射为对应的 Base58 字符,并将该字符添加到结果中。

     4.将大整数除以 58 的结果作为新的被除数,重复步骤 3,直到被除数为 0。

     5.得到最终的 Base58 编码结果。

eg.

二进制数据:01001101 01100001 01101110 00110001 00110010(对应 ASCII 码为 "Man12")。

     1.将数据转换为一个大整数:3113893779。

     2.将大整数除以 58,得到商和余数:商为 53620788,余数为 55。

     3.将余数映射为对应的 Base58 字符,添加到结果中:结果为 "z"。

     4.将商作为新的被除数,重复步骤 2 和 3,直到商为 0。

     5.得到最终的 Base58 编码结果为 "z".

4.Base64

Base64 是一种常用的编码方式,用于将二进制数据转换为可打印字符序列。它广泛应用于电子邮件、网页传输、数据存储等场景,常用于将图片、音频、视频等二进制数据以文本形式进行传输或存储。

编码的原理如下:

     1.将待编码的数据分割成每 3 个字节一组(24 位)。

     2.将每组 24 位的数据划分为 4 个 6 位的片段。

     3.将每个 6 位的片段转换为对应的 Base64 字符。Base64 字符集包含 64 个字符,通常是 A-Z、a-z、0-9 和 "+"、"/"(有时还会使用 "=" 作为填充字符),用于表示不同的值。

     4.如果最后一组数据不足 3 个字节,会进行特殊处理来填充数据,确保数据长度为 3 的倍数。通常使用 "=" 字符进行填充。

还是上一个例子

     1.将数据分组为每 3 个字节一组:01001101 01100001 01101110 00110001 00110010。

     2.将每组 24 位的数据划分为 4 个 6 位的片段:010011 010110 000101 101110 001100 010000。

     3.将每个 6 位的片段转换为对应的 Base64 字符:S2FtMQ==。

     4.最后加上填充字符 "=",如果需要的话,得到最终的 Base64 编码结果为 "S2FtMQ=="

5.Base85

将二进制数据转换为可打印字符序列。与 Base64 相比,Base85 可以更高效地表示二进制数据,因为它使用更大的字符集,每个字符可以表示更多的比特。

编码的原理如下:

     1.定义一个包含 85 个字符的字符集,通常是由连续的 ASCII 可打印字符组成,不包含易混淆的字符。

     2.将待编码的数据分割成每 4 个字节一组(32 位)。

     3.将每组 32 位的数据转换为一个大整数。

     4.使用大整数除以 85^4,将结果的商和余数映射为对应的 Base85 字符,并将该字符添加到结果中。

     5.将大整数除以 85^3 的结果作为新的被除数,重复步骤 4,直到被除数为 0。

     6.得到最终的 Base85 编码结果。

  Base85 编码通常用于数据压缩和加密算法中,以及需要高效表示二进制数据的应用。它比 Base64 更节省空间,但也会增加编码和解码的计算复杂性。

由于 Base85 使用更大的字符集,编码后的数据长度会比原始数据更长。具体的长度增加比例取决于原始数据的大小。

6.Base91

一种自定义的编码方案,用于将二进制数据转换为可打印字符序列。

Base91 编码的原理如下:

1.定义一个包含 91 个字符的字符集,通常是由连续的 ASCII 可打印字符组成,不包含易混淆的字符。

2.将待编码的数据分割成每 13 个字节一组(104 位)。

3.将每组 104 位的数据转换为一个大整数。

4.使用大整数除以 91^8,将结果的商和余数映射为对应的 Base91 字符,并将该字符添加到结果中。

5.将大整数除以 91^7 的结果作为新的被除数,重复步骤 4,直到被除数为 0。

6.得到最终的 Base91 编码结果。

Base91 编码可以更高效地表示二进制数据,相较于 Base64 和 Base85,它可以在相同长度的编码结果中包含更多的原始数据。这使得 Base91 在某些情况下可以提供更好的压缩比率。

 由于 Base91 使用自定义的字符集,它并不是一种标准的编码方式,而是一种特定应用或系统中使用的自定义方案。在实际应用中,如果要使用 Base91 编码,需要确保编码和解码的双方都使用相同的字符集和编码规则。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1000BASE-T编码是通过8B1Q4编码方式和4D-PAM5调制方式来传输数据的。编码过程如下:首先,将每组8个比特的数据分割,并加上1个冗余位作为错误校验,总共为9个比特的数据。然后,根据冗余位和前两个比特数据选择转换表,得到剩下的6个比特所对应的4个符号值。这些符号值可以是-2、-1、0、+1、+2这5个值中的任意一个。接下来,将这4个符号值转换为相应的电平,通过PMA在双绞线上进行传输,这一系列的数据调制发送就被称为4D-PAM5方式。\[1\] 关于1Gbit/s的数据比特率的计算,可以从编码过程中得到。每个符号包含2个比特的数据,而PHY的参考时钟为125MHz,也就是PMA的发送波特率为125MBd。因此,一个波特码元包含2比特数据,每个线对上的数据率为125x2=250bps。由于4对线,所以总数据率为250x4=1000bps。需要注意的是,波特率和比特率是不同的概念,为了提高带宽利用率,人们想出了使用一个波特码元传输多个数据比特的方法。\[1\] 总结起来,1000BASE-T编码使用8B1Q4编码方式和4D-PAM5调制方式来传输数据,每个符号包含2个比特的数据,通过PMA在双绞线上进行传输,实现了1Gbit/s的数据比特率。\[1\] #### 引用[.reference_title] - *1* [【以太网硬件六】1000base-T物理层编码究竟是怎么编的?](https://blog.csdn.net/highman110/article/details/127141312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [802.3 spec选学---1000BASE-T](https://blog.csdn.net/m0_53559277/article/details/127375166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值