首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将大整数编码/压缩为字母数字值

将大整数编码/压缩为字母数字值
EN

Stack Overflow用户
提问于 2013-10-11 09:13:32
回答 2查看 2.9K关注 0票数 4

我有一个非常大的12-14位整数,我想将其加密/压缩为一个字母数字值,以便以后可以从字母数字值中恢复该整数。我尝试使用62个基来转换这个整数,并试图将这些值映射到a-zA-Z0-9,但是由此生成的值有7个字符长。这个长度仍然足够长,我想转换为大约4-5个字符。

是否有一种一般的方法可以这样做,或者某种方法可以这样做,以便恢复整数仍然是可能的?我在这里询问数学方面的问题,但是我会用php编写这个程序,我最近开始用PHP编程。

编辑:

我在考虑如何分配一个掩蔽位,并以一种方式使用它来生成更少的字符。我意识到这样一个事实,范围是不够的,这就是为什么我专注于使用一个数学技巧或一种表示方式。这62个基地是一个想法,我已经申请,但没有发挥作用。

EN

回答 2

Stack Overflow用户

发布于 2013-11-20 23:57:20

使用95个可打印的ASCII字符,您可以切换到基本95编码,而不是62个:

代码语言:javascript
复制
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

这样,长度为X的整数字符串可以压缩为长度为Y的基本95字符串,其中

代码语言:javascript
复制
Y = X * log 10/ log 95 = roughly X / 2

这是相当好的压缩。所以从12到6。如果压缩的目的是通过使用JSON节省带宽,那么基92可以是很好的选择(不包括在JSON中转义的",\,/ )。

当然,您可以得到更好的压缩,但代价是一个更大的字母表。只需用符号数替换上面公式中的95。

当然,除非你知道整数的结构。例如,如果它们有大量的零,您可以基于这些知识进行压缩,以获得更好的结果。

票数 2
EN

Stack Overflow用户

发布于 2013-10-11 10:02:29

因为鸽子原则,你最终会得到一些被压缩的值,还有一些被扩展的值。根本不可能创建压缩算法来压缩每个可能的输入字符串(在您的情况下,您的数字)。

如果强迫输出集的基数小于输入集的基数,则会出现冲突(即,更多输入字符串被“压缩”到同一压缩二进制字符串)。压缩算法应该是可逆的,对吗?:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19314445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档