我正在寻找一个Crockford Base32的Java实现,将与非常大的数字。下面是我正在处理的数字类型的示例:
0003019140802085400304608040952
我见过几个使用编码Long并解码为long的实现,但这比Long的最大值大得多。
我发现了这个实现,但它似乎给出了奇怪的结果:https://gist.githubusercontent.com/markov/5206312/raw/ba5ec8ff1ef894ac889d2d1fad359d51d91e8ab9/CrockfordBase32.java
上面的数字应该编码为2E1BZQDAGC4G6TTENZR,但是这个实现并没有给我任何接近这个的东西。
3条答案
按热度按时间qv7cva1a1#
下面是Base 32的一般实现,其中包含Crockford字符集的实现。它有
format
和parse
两个方法,应该是互补的。注意:请彻底测试-这从来没有被用在一个严重的方式,所以可能有错误。
测试输出行:
所以你的数字似乎翻译得没错
3phpmpom2#
使用来自@OldCurmudgeon的答案(这是我所问问题的正确答案),我做了一些修改,以允许从/到base 10的任何基本编码/解码。这不是为了性能而构建的,而是为了功能。
u4dcyp6a3#
不是很难(这是闲聊,但你应该明白这个想法)unitsMax = 31,shiftBy = -5(对于基数32)