如何解决如何将整数压缩为较小的文本字符串?
给定一个随机整数,例如 19357982357627685397198。如何将这些数字压缩成字符较少的字符串?
文本字符串只能包含数字或字母字符,包括大写和小写。
我尝试过声称可以压缩的 Base64 和 Huffman 编码,但它们都没有使在键盘上书写时字符串变短。
我还尝试制作某种算法,尝试将整数除以数字“2,3,...,10”并检查结果中的最后一个数字是否是它被除以的数字(看起来在除以 10 的情况下为 0)。因此,在解密时,您只需将数字乘以整数中的最后一个数字即可。但这不起作用,因为在某些情况下,你不能除以任何东西,数字会保持不变,当它被解密时,它只会乘以比你开始时更大的数字。
我还尝试将整数从左边开始分成 2 个数字块并给它们一个字母 (a=1,b=2, o=15),当它到达 z 时,它只会回滚到 a。这不起作用,因为当它被解密时,它不知道这个数字在 z 上滚动了多少次,因此比开始时小得多。
我还尝试了一些其他常见的加密策略。例如 Base32、Ascii85、Bifid Cipher、Baudot Code 和其他一些我不记得的东西。
这似乎是一个无法解决的问题。但是因为它以整数开头,所以每个数字可以包含 10 种不同的组合。在字母表中,字母可以包含 26 种不同的组合。这使得您可以在 5 个字母中存储比 5 位整数更多的数据。因此,用数学方法可以在字符串中存储比整数中更多的数据,但我找不到任何曾经这样做过的人。
解决方法
您从基数 10 切换到例如。通过重复除以 62 以 62 为基数,并像这样记录每一步的余数:
Converting 6846532136 to base62:
Operation Result Remainder
6846532136 / 62 110427937 42
110427937 / 62 1781095 47
1781095 / 62 28727 21
28727 / 62 463 21
463 / 62 7 29
7 / 62 0 7
然后您将余数用作您选择的 base62 字母表的索引,例如:
0 1 2 3 4 5 6
01234567890123456789012345678901234567890123456789012345678901
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Giving: H (7) d (29) V (21) V (21) v (47) q (42) = HdVVvq
------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。