Что происходит за кулисами с помощью метода - public static long parseLong (String s, int radix) - PullRequest
0 голосов
/ 11 октября 2011

Мне нужно сгенерировать неповторимый уникальный Long на основе имени пакета.Вместо использования «Преобразовать строку в длинную» в Eclipse я думаю, что могу выполнить ту же задачу во время выполнения, используя метод public static long parseLong (String s, int radix)?

Я думаю, что мне нужно что-то использоватьнапример -
Long.parseLong ("Фундук", 36) возвращает 1356099454469L

Что я получил из вопроса - Как преобразовать строку в long в Java?

Почему мне нужно установить radix на 36 при преобразовании строки, содержащей символы?

1 Ответ

5 голосов
/ 11 октября 2011

Ну, в основном вы должны рассматривать его как число в базе 36. Так, например, строка "012" будет означать 2 + 1 * 36 + 0 * 36 2 . Когда у вас заканчиваются цифры, вы переходите к буквам - поэтому «ABC» будет означать 12 от «C» + 11 от «B» * 36 + 10 от « A ' * 36 2 .

Если вы понимаете, как работает hex, это то же самое, за исключением использования всех символов латинского алфавита.

Он потерпит неудачу для чего-либо, кроме 0-9, A-Z, a-z - и также не удастся для достаточно длинных строк; long работает только до 2 63 , которые вы достаточно быстро пройдете на базе 36. Например, «Hazelnut12345» не срабатывает. О, и это без учета регистра, так что значение для "foo" такое же, как и для "FOO" - это не соответствует вашему требованию уникальности?

По сути, у вас есть только 2 64 long значений для игры, поэтому, если имена ваших пакетов не очень ограничены, вы не сможете создать уникальное отображение.

...