-1

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

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

4

1 回答 1

2

想知道在c语言的数字范围内不能表达的数字怎么表达。

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

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

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

你能告诉我base36的算法吗?

基本上有两个步骤:

  • 首先将输入数据转换为 radix-36。
  • 接下来将这些数字映射到文本,以便数字 0 映射到字符“0”,数字 10 映射到“A”,而 35 映射到“Z”。您可以迭代我没有提供的映射。
于 2021-01-20T13:29:36.070 回答