Base32 字母是十六进制的重叠超集? (math/CS)

Base32 alphabet that is an overlapping superset of hexadecimal? (math/CS)

这可能更像是一道数学题,但我被难住了:

假设我有一个 8 位十六进制字符串。这可以表示从 0 到 2^32-1 的值。现在假设我想要一个像 base32 这样的另一个基数的 8 位字符串。是否可以为 base32(或另一个基数)构建一个字母表,它是十六进制的严格超集,以便任何低于 2^32-1 的十六进制字符串都将通过 base32 解码为相同的值,并且只有更大的值 >=2^32 开始合并十六进制范围外的 base32 字符?

换句话说,是否可以"upgrade"以与十六进制标识符向后兼容的方式从基数 16 到更高编号的基数?

我不确定我是否理解正确;如果我错了,请纠正我。总之:

一个十六进制数字(以 16 为基数)由 4 位表示。它的范围是0000 … 1111,代表数字0 … F.
因此,一个 8 位十六进制字符串由 32 位表示,可以表示从 0 到 2^32-1 的值。它的范围是 00000000 … FFFFFFFF。

让我们考虑一个 17 进制系统,这里称为 17dec 系统。
17dec 数字(基数 17)由 5 位表示。它的范围是 00000 … 11111,代表数字 0 … V(使用标准的拉丁字母表)。
因此,一个 8 位 17dec 字符串由 40 位表示,可以表示从 0 到 2^40-1 的值。它的范围是 00000000 … VVVVVVVV。

因此,hex 和 17dec 涵盖了从 0 到 2^32-1 的相同位组合。因此,不可能有一个具有较高基数的数字系统与较低的基数系统按位兼容。

举个例子值 10000.
10000 的十六进制表示为 10.
10000的17dec表示是G.
没有办法让它兼容。

您可以根据需要将数字分配给 8 个字符的字符串。

有 232 个 8 字符的十六进制字符串,您当然可以为其分配十六进制值。

有 240 个 8 字符的字符串,例如 0123456789ABCDEFGHJKMNPQRSTUVWXY。 232为16进制字符串,其余240 - 232字符串可以任意赋值你喜欢

但是,您将无法通过 "normal" 类似十进制的系统为它们分配数字,因为十六进制要求“10”为 16,而不是 32。有些方法不是这样然而,很难。例如,给定一个 40 位数:

  1. 将低 32 位转换为 8 个字符的十六进制。
  2. 将剩余的一位分配给每个字符,对于每一位,将'G'添加到相应的字符,将其范围从'0-F'更改为'G-Y'

现在每个 40 位数字都有一个字符串,较小的数字具有与其十六进制表示相同的字符串。