是否有使用 5 位作为一组来编码二进制数据的编码?
AZ 包含 26 个字符,0-9 包含 10 个字符。总共有 36 个字符足以进行 5 位编码(仅 32 种组合)。
为什么我们不使用 5 位编码而不是八进制或十六进制?
正如@S.Lott 的评论中提到的,当紧凑性很重要时,base64(6 位)通常用于将二进制数据编码为文本。
出于调试目的(例如十六进制转储),我们使用十六进制,因为一个字节的大小可以被 4 位整除,因此每个字节都有一个唯一的 2 位十六进制表示,无论它周围有什么其他字节。这使得在查看十六进制转储时很容易“看到”各个字节,并且在 8 位二进制和 2 位十六进制之间进行心理转换也相对容易。(在 base64 中,字节和编码字符之间没有 1:1 的对应关系;同一个字节可以根据其位置和其他相邻字节的值产生不同的字符。)
当然,为什么不:
Welcome to Clozure Common Lisp Version 1.7-dev-r14614M-trunk (DarwinX8664)!
? (let ((*print-base* 32)) (print 1234567))
15LK7
1234567
? (let ((*print-base* 32)) (print (expt 45 19)))
KAD5A5KM53ADJVMPNTHPL
25765451768359987049102783203125
?