2011-10-11 35 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嗎? –

相關問題