将23个char字符串编码为9个char字符串,然后单独解码

时间:2014-10-27 13:50:04

标签: string algorithm decode encode

如何将像0123456789abcdefghijklmnopqrstuv这样的字符串编码为9个字符串,然后将其解码回来?

实际上我的输入字符串是示例中包含的字符的随机组合,我想找到一种方法来缩短字符串形式,然后将其解码回来。

1 个答案:

答案 0 :(得分:2)

在字符集" 0123456789abcdefghijklmnopqrstuv"中,有32个不同的字符。

有32 ^ 23(约4 * 10 ^ 34)个不同的字符串,长度为23个字符,仅由上述字符组成。

有256 ^ 9(约4 * 10 ^ 21)个不同的字符串,长度为9个字符,由ASCII字符的任意组合组成。

4e34比4e21大得多,所以pigeonhole principle没有办法将第一种字符串无损地压缩成第二种字符串,也无法明确地将第二种字符串解码为第一种字符串。


虽然你无法将其压缩到那么远,但仍然可以进行某些压缩。你可以通过比特包装来获得大约5/8的改进。

首先将您的角色转换为数字。恩。 h是字符集中的第17个数字,因此它变为17。

hello
[17, 14, 21, 21, 24]

将您的数字转换为二进制数。请记住将每个值填充为5位。

[17, 14, 21, 21, 24]
[10001, 01110, 10101, 10101, 11000]

将二进制文件合并为一个大值。

[10001, 01110, 10101, 10101, 11000]
1000101110101011010111000

将值拆分为八位数的部分。

1000101110101011010111000
1 00010111 01010110 10111000

将每个部分转换为十进制。

1 00010111 01010110 10111000
[1, 23, 86, 184]

将每个数字转换为相应的ASCII值。

[1, 23, 86, 184]
['\x01', '\x17', 'V', '\xb8']

现在你压缩了你的五个字符序列"你好"进入四个字符序列" \ x01 \ x17V \ xb8'"。