如何将长字符串转换为短字符串,并且是可逆操作

Yon*_*i Z -1 algorithm go

我有一个很长的stringfrom Base64,但是它太长了,我如何将其转换为短的。我希望这是一个可逆的操作,因为我想从短的中得到长的。顺便说一句,我不想​​将这两个字符串保存到数据库中。

Del*_*ace 5

由于鸽巢原理,一般不可能将任意长字符串转换为任意短字符串:

  • 可逆性意味着转换域(小字符串)至少需要与转换域(大字符串)一样多的元素,
  • 存在比不同短字符串多得多的不同长字符串。

作为与整数的类比,请考虑将 3 位数字(900 种可能性)转换为 2 位数字(90 种可能性)并且仍然可逆,因为 90 < 900。

但是,如果长字符串是可预测的并且有很多冗余,您可以尝试应用像 gzip 这样的无损压缩算法,以便在常见情况下缩短它。

  • [*无损数据压缩算法不能保证所有输入数据集的压缩。换句话说,对于任何无损数据压缩算法,都会有一个输入数据集在经过该算法处理后不会变小,并且对于任何使至少一个文件变小的无损数据压缩算法,都会有至少一个它使文件变得更大。*](https://en.wikipedia.org/wiki/Lossless_compression#Limitations) (2认同)