2011-10-11 39 views
0

我需要基于包的名称生成一致的唯一Long。而不是在Eclipse中使用“将字符串转换为long”我想我可以通过使用方法在运行时实现相同的任务public static long parseLong(String s,int radix)?使用方法在幕后发生了什么 - public static long parseLong(String s,int radix)

我想我需要使用类似的东西 -
的Long.parseLong(“榛子”,36)返回1356099454469L

这是我从问题了 - How to convert String to long in Java?

为什么我需要基数设为转换包含字符的字符串时36?

回答

5

那么,你基本上把它当作一个基数为36的数字。例如,字符串“012”将意味着2 + 1 * 36 + 0 * 36 。当您运行的数字,你去信 - 这样的 “ABC” 将12 从意味着 'C' + 11 从 'B' * 36 + 10 从 'A' * 36 。

如果您了解十六进制的工作方式,除了使用拉丁字母表中的所有字符外,它们是相同的。

虽然它不会在0-9,A-Z,a-z中出现故障,而且它也会失败,例如,long只能工作到2 ,您可以在基准36中合理快速地过去。例如,“Hazelnut12345”失败。哦,这是不区分大小写的,所以“foo”的值与“FOO”的值相同 - 这是否违反了您的唯一性要求?

基本上你只有2 long值来玩,所以除非你的软件包名称是非常有限的,你不打算出一个独特的映射。

+0

我可以将十进制数/二进制转换为十六进制,但是当涉及到字符串时我有点困惑。你是如何锻炼的 - 字符串“012”意味着2 + 1 * 36 + 0 * 36(平方)?它不需要区分大小写。 –

+0

@ user470184:想一想,如果“012”以10为基数,这意味着2 + 1 * 10 + 0 *(10平方)。现在拿着10号,并且记住你要求它使用底座36 ......并且你会看到我从哪里得到数字。 –

+0

基数10中的“012”不仅仅是12吗? –

相关问题