2011-12-31 8 views
59

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.

+0

Musisz wydrukować? musisz przekształcić go w ciąg znaków? –

+0

Będę pisać do pliku jako dwucyfrowy hex –

+0

Czy sprawdziłeś przynajmniej javadoc Integer? W jaki sposób planujesz przekonwertować 12345656 na 2-cyfrową wartość szesnastkową? –

Odpowiedz

106
String.format("%02X", value); 

Jeśli używasz X zamiast xas suggested by aristar, wtedy nie trzeba używać .toUpperCase().

+7

To jest obecnie najlepsza odpowiedź. –

+0

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

+0

Najlepsze rozwiązanie! Najkrótszy i najbardziej czytelny. Dzięki: D – wassup

27
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.

+2

Fajna wyrzutnia zerowa :) – Grodriguez

+0

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

14

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(); 
+1

Czy użycie 'StringBuilder' jest rzeczywiście ulepszeniem? http://pastebin.com/KyS06JMz –

3

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); 
} 
23
String.format("%02X", (0xFF & value));  
+6

Czy ktoś może wyjaśnić, dlaczego robi to trochę mądro iz 0xFF? Dlatego odpowiedzi na SO nie powinny być po prostu kodem –

+4

Wartość OxFF & (byte) po prostu konwertowane bajtów na niepodpisane. (int) -1 = 0xFFFFFFFF, (int) (-1 & 0xFf) = 0xFF – aristar

+0

W tym przypadku bit-mądry i z 0xFF nie jest potrzebny z powodu formatu "% 02X". –