Muszę zmienić wartość całkowitą na 2-cyfrową wartość szesnastkową w Javie. Czy jest jakiś sposób na to. DziękiInteger na dwie cyfry hex w Javie
Moja największa liczba będzie 63, a najmniejsza 0. Chcę prowadzić zero dla małych wartości.
Muszę zmienić wartość całkowitą na 2-cyfrową wartość szesnastkową w Javie. Czy jest jakiś sposób na to. DziękiInteger na dwie cyfry hex w Javie
Moja największa liczba będzie 63, a najmniejsza 0. Chcę prowadzić zero dla małych wartości.
String.format("%02X", value);
Jeśli używasz X
zamiast x
as suggested by aristar, wtedy nie trzeba używać .toUpperCase()
.
To jest obecnie najlepsza odpowiedź. –
Uzgodnione, że ten jest znacznie lepszy niż którykolwiek z pozostałych. Działa idealnie. Jedyne, co sugerowałbym, to trochę więcej opisu parametrów przekazywanych do metody. Musiałem sprawdzić, czy przekazałem wartość jako liczbę całkowitą lub jako ciąg szesnastkowy. – JRSofty
Najlepsze rozwiązanie! Najkrótszy i najbardziej czytelny. Dzięki: D – wassup
Integer.toHexString(42);
Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
pamiętać, że może to dać więcej niż 2 cyfry, jednak! (Liczba całkowita to 4 bajty, więc możesz odzyskać 8 znaków.)
Oto trochę hack, aby uzyskać dopełnienie, o ile masz absolutną pewność, że masz do czynienia tylko z wartościami jednobajtowymi (255 lub mniej):
Integer.toHexString(0x100 | 42).substring(1)
Wiele więcej (i lepszych) rozwiązań w Left padding integers (non-decimal format) with zeros in Java.
Fajna wyrzutnia zerowa :) – Grodriguez
Możesz użyć tej samej techniki dla większych wartości. Jeśli chcesz dopełnić do 2-bajtowych wartości, możesz wykonać Integer.toHexString (0x10000 | wartość) .substring (1). Dla N cyfr szesnastkowych dodajemy N 0s po "1". Oczywiście twoja wartość szesnastkowa nie może zawierać więcej niż N cyfr. – user823981
Użyj Integer.toHexString()
. Nie zapomnij podkładać z wiodącym zerem, jeśli skończysz z jedną cyfrą. Jeśli twoja liczba całkowita jest większa niż 255, otrzymasz więcej niż 2 cyfry.
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();
Czy użycie 'StringBuilder' jest rzeczywiście ulepszeniem? http://pastebin.com/KyS06JMz –
Jeśli wystarczy wydrukować je spróbować tego:
for(int a = 0; a < 255; a++){
if(a % 16 == 0){
System.out.println();
}
System.out.printf("%02x ", a);
}
String.format("%02X", (0xFF & value));
Czy ktoś może wyjaśnić, dlaczego robi to trochę mądro iz 0xFF? Dlatego odpowiedzi na SO nie powinny być po prostu kodem –
Wartość OxFF & (byte) po prostu konwertowane bajtów na niepodpisane. (int) -1 = 0xFFFFFFFF, (int) (-1 & 0xFf) = 0xFF – aristar
W tym przypadku bit-mądry i z 0xFF nie jest potrzebny z powodu formatu "% 02X". –
Musisz wydrukować? musisz przekształcić go w ciąg znaków? –
Będę pisać do pliku jako dwucyfrowy hex –
Czy sprawdziłeś przynajmniej javadoc Integer? W jaki sposób planujesz przekonwertować 12345656 na 2-cyfrową wartość szesnastkową? –