好奇base36编码

Curious about base36 encoding

我要base36编码128位十六进制数, 但是128bit超出了c语言支持的最大数的范围。 所以,我不能通过求余数和求商来得到36个数的值。

我很好奇 base36 中处理如此长字符串的内部算法。 想知道c语言的数域不能表示的数怎么表示。 你能告诉我base36的算法吗?或者,我想要一本书或网站以供参考。

I am wondering how to express the number that cannot be expressed in the number range of c language.

考虑一个字节数组。这些字节由位组成。现在,假设该字节由 8 位组成。接下来,考虑一个 16 字节的数组。该数组中共有 128 位。您可以使用最低的元素表示 128 位整数的前 8 位,下一个元素表示位 8...15 等等。

这就是在 C 中可以表示任意大整数的方式:使用较小整数的数组,每个元素代表一个高基数。在我描述的方案中,数字使用基数 256 表示。您不一定需要使用字节数组。通常,任意精度数学使用 CPU 字长的元素来提高效率。例如,对于 32 位元素,基数为 4'294'967'296。

在 base36 编码中,基数,即表示的基数是 - 你可能已经猜到了 - 36。它是一种文本表示,因此数组的元素是字符。该表示没有使用所有 256 个值,而是仅使用了其中的 36 个值;特别是那些编码大写拉丁字母字符和阿拉伯数字字符的值。

Can you tell me about the algorithm for base36?

基本上有两个步骤:

  • 首先将输入数据转换为radix-36。
  • 接下来将这些数字映射到文本,以便数字 0 映射到字符“0”,数字 10 映射到 'A',数字 35 映射到 'Z'。你可以迭代我没有提供的映射。