如何解决对 base36 编码感到好奇
我想对 128 位十六进制数进行 base36 编码, 但是128bit超出了c语言支持的最大数的范围。 因此,我无法通过求余数和求商来获得 36 个数字的值。
我很好奇 base36 中处理如此长字符串的内部算法。 我想知道c语言的数字范围内无法表达的数字如何表达。 你能告诉我base36的算法吗?或者,我想要一本书或网站以供参考。
解决方法
我想知道c语言的数字范围内不能表达的数字怎么表达。
考虑一个字节数组。这些字节由位组成。现在,假设字节由 8 位组成。接下来,考虑一个 16 字节的数组。该数组共有 128 位。您可以使用最低元素表示 128 位整数的前 8 位,使用下一个元素表示第 8...15 位,依此类推。
这就是在 C 中可以表示任意大整数的方式:使用较小整数的数组,每个元素代表一个高基数。在我描述的方案中,数字使用基数 256 表示。您不一定需要使用字节数组。通常,任意精度数学使用 CPU 字长的元素来提高效率。例如,在 32 位元素的情况下,这将是 4'294'967'296 的基数。
在 base36 编码中,基数,即表示的基数是 - 你可能已经猜到了 - 36。它是一个文本表示,所以数组的元素是字符。与使用所有 256 个值不同,此表示仅使用这些值中的 36 个;特别是那些对大写拉丁字母字符和阿拉伯数字字符进行编码的值。
你能告诉我关于 base36 的算法吗?
基本上有两个步骤:
- 首先将输入数据转换为 radix-36。
- 接下来将这些数字映射到文本,以便数字 0 映射到字符“0”,数字 10 映射到“A”,而数字 35 映射到“Z”。您可以对我未提供的映射进行插值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。