我想base36编码128bit的十六进制数,但是128bit超出了c语言支持的最大数的范围。所以,我无法通过求余数和商来获得 36 个数字的值。
我很好奇base36中处理这么长字符串的内部算法。想知道在c语言的数字范围内不能表达的数字怎么表达。你能告诉我base36的算法吗?或者,我想要一本书或网站供参考。
想知道在c语言的数字范围内不能表达的数字怎么表达。
考虑一个字节数组。这些字节由位组成。现在,假设字节由 8 位组成。接下来,考虑一个 16 字节的数组。该数组共有 128 位。您可以使用最低元素表示 128 位整数的前 8 位,下一个元素表示位 8...15,依此类推。
这就是在 C 中可以表示任意大整数的方式:使用较小整数的数组,每个元素代表一个高基数数字。在我描述的方案中,数字使用基数 256 表示。您不一定需要使用字节数组。通常,任意精度数学使用 CPU 字长的元素来提高效率。例如,在 32 位元素的情况下,这将是 4'294'967'296 的基数。
在 base36 编码中,基数,即表示的基数是 - 你可能已经猜到了 - 36。它是一个文本表示,所以数组的元素是字符。此表示仅使用其中的 36 个值,而不是使用所有 256 个值;特别是那些编码大写拉丁字母字符和阿拉伯数字字符的值。
你能告诉我base36的算法吗?
基本上有两个步骤: