Абсолютное значение Java

Я пытаюсь создать каталог с именем абсолютного значения шестнадцатеричной версии хешированного URL-адреса, используя встроенный метод hash() класса String. Теперь hash() может дать отрицательный результат, а имя каталога, начинающееся со знака минус, довольно сложно обработать, поэтому мне нужно абсолютное значение этого. Однако я не могу понять, как получить абсолютное значение шестнадцатеричной версии строки хешированного URL.

2 ответа

Решение

Шестнадцатеричное значение никогда не имеет отрицательного знака! Это просто шестнадцатеричное представление двоичного шаблона комплимента для значения.

System.out.println(Integer.toHexString(-1)); // ffffffff
System.out.println(Integer.toHexString(Integer.MIN_VALUE)); // 80000000

Точно так же, как твоя мать всегда говорила тебе: "Ты идеален таким, какой ты есть":

String dirname = Integer.toHexString(dirname.hashCode()); // never has minus sign

Приведите его к длинному, замаскируйте старшие 32 бита, затем преобразуйте это в строку.

 long longHash = intHash;
 long nonNegativeLongHash = longHash & ((1L << 32) - 1);
 String unsignedHex = Long.toHexString(nonNegativeLongHash);
Другие вопросы по тегам