2012-02-17 11 views
49

Próbuję przekonwertować liczbę z liczby całkowitej na inną liczbę całkowitą, która, jeśli zostanie wydrukowana w postaci heksadecymalnej, będzie wyglądać tak samo jak oryginalna liczba całkowita.Konwersja Java na liczbę całkowitą do szesnastkowej

Na przykład:

Konwersja 20 do 32 (która jest 0x20)

Konwersja 54 do 84 (co jest 0x54)

+0

Możliwy duplikat [Jak uzyskać wartość szesnastkową z liczby całkowitej w java] (http://stackoverflow.com/questions/5258415/how-to-get-hex-value-od-integer-in-java) – Vadzim

+0

I dopiero teraz uświadomiłem sobie, że aby faktycznie rozwiązać podane przypadki testowe, należy przekształcić ** hex na int **, a nie odwrotnie. Jednak tytuł pytania, który mówi "Konwersja liczby całkowitej do szesnastkowej integer Java", doprowadził wiele odpowiedzi, w tym moją i najbardziej upvoted do konwersji ** int na hex **. – Wit

Odpowiedz

36
public static int convert(int n) { 
    return Integer.valueOf(String.valueOf(n), 16); 
} 

public static void main(String[] args) { 
    System.out.println(convert(20)); // 32 
    System.out.println(convert(54)); // 84 
} 

Oznacza to, że w leczeniu pierwotnej liczby jak gdyby był w systemie szesnastkowym, a następnie konwertowany na dziesiętny.

+3

Konwersja z 4 bajtów na ciąg, a następnie z łańcucha na int i na hex? Nie, dziękuję. –

+3

To rozwiązanie jest wadliwe. Spróbuj uruchomić następujące: Integer.valueOf (String.valueOf (-2115381772), 16) - zwraca to wyjątek NumberFormatException. – Lonzak

+0

Jesteś świetny –

4
String input = "20"; 
int output = Integer.parseInt(input, 16); // 32 
5

Można spróbować coś takiego (tak byłoby to zrobić na papierze):

public static int solve(int x){ 
    int y=0; 
    int i=0; 

    while (x>0){ 
     y+=(x%10)*Math.pow(16,i); 
     x/=10; 
     i++; 
    } 
    return y; 
} 

public static void main(String args[]){ 
    System.out.println(solve(20)); 
    System.out.println(solve(54)); 
} 

Do przykładów dałeś to by obliczyć: 0 * 16^0 + 2 * 16^1 = 32 i 4 * 16^0 + 5 * 16^1 = 84

235

Najprostszym sposobem jest użycie Integer.toHexString(int)

+3

Pytanie dotyczy konwersji z liczby całkowitej na liczbę całkowitą , nie jest liczbą całkowitą do łańcucha. Przeczytaj ponownie pytanie. –

+34

To nie ma jednak sensu, nie można kontrolować wewnętrznej reprezentacji liczby całkowitej. Jeśli chcesz czegoś na hexie, z definicji pytasz o ludzką czytelną reprezentację. – sircodesalot

+2

@sircodesalot: Pytanie dotyczy obliczania liczby całkowitej z pewną właściwością _if_ drukowaną w postaci heksadecymalnej, która jest konwersją czysto matematyczną. Zdecydowanie nie zgadzam się z Jossefem, że odpowiedź powinna być oznaczona jako poprawna w oparciu o wyniki google, ale według głosów wydaje mi się, że jestem w mniejszości. – Pianosaurus

1

Kolumnę zoptymalizowane IFF Y następujących ou chcesz tylko wydrukować reprezentację heksadecymalną liczby całkowitej pozytywnej.

Powinien być błyskawiczny, ponieważ używa tylko manipulacji bitem, wartości utf-8 znaków ASCII i rekursji, aby uniknąć odwrócenia na końcu wartości StringBuilder.

public static void hexa(int num) { 
    int m = 0; 
    if((m = num >>> 4) != 0) { 
     hexa(m); 
    } 
    System.out.print((char)((m=num & 0x0F)+(m<10 ? 48 : 55))); 
} 
6

Alternatywny sposób przekształcania int na heks.

String s = String.format("%X", num);

można zmienić kapitał X do x za małe.

0

Wystarczy to zrobić:

public static int specialNum(num){ 

    return Integer.parseInt(Integer.toString(num) ,16) 
} 

Należy zamienić dowolny specjalny całkowitą dziesiętną do jego szesnastkowy odpowiednik.