Абсолютное значение 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);