如何将整数压缩为更小的文本字符串?
How to compress an integer to a smaller string of text?
给定一个随机整数,例如 19357982357627685397198。如何将这些数字压缩成字符数更少的文本字符串?
文本字符串只能包含大小写的数字或字母字符。
我已经尝试过声称可以压缩的 Base64 和 Huffman 编码,但是 none 它们会使在键盘上书写时的字符串变短。
我还尝试制作某种算法,尝试将整数除以数字“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
------
给定一个随机整数,例如 19357982357627685397198。如何将这些数字压缩成字符数更少的文本字符串?
文本字符串只能包含大小写的数字或字母字符。
我已经尝试过声称可以压缩的 Base64 和 Huffman 编码,但是 none 它们会使在键盘上书写时的字符串变短。
我还尝试制作某种算法,尝试将整数除以数字“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
------