从长整数中创建唯一可读字符串

时间:2013-05-25 18:11:07

标签: objective-c algorithm converter

我有这样的长整数:5291658276538691055

我怎样才能以编程方式将此数字转换为4-6大写字母,这只是一个独特的组合,也可以反转以回到数字?

例如使用OBJ-C。

2 个答案:

答案 0 :(得分:3)

有26个大写字母;

其中6个可以代表26 ^ 6个数字(308915776);

所以,不。您试图将更大范围的数字映射到更小的范围,它不可逆转。

此外,log 5291658276538691055 / log 26小于14,所以如果14个字母对你有好处,只需将数字转换为26,并将数字映射到字母。

还有一件事 - 如果数字范围足够小,你可以对数字进行一些操作(例如,只减去最小值)并对其进行编码,这将花费你更少的数字。

答案 1 :(得分:1)

您需要将数字转换为Base 26(Hexavigesimal - snappy name!)

Wikipedia article on Hexavigesimal给出了Java中的示例代码 - 您应该能够很容易地调整它。

注意:你不能仅使用转换算法将你提到的长号码变为4-6大写字母(你在Base 26中的例子是BCKSATKEBRYBXJ)。如果您需要简短的转换,您只有两个选项:

  • 查找表(存储映射,例如5291658276538691055 = ABCDEF)。显然只有在你有一组离散的数字时才有用。
  • 包括其他字符(例如小写字母+数字)。