2013-02-03 23 views
10

Mam mały problem. Mam numery jak 5421, -1 i 1. muszę wydrukować je w czterech bajtów, jak:Java druk czterobajtowy numer heksadecymalny

5421 -> 0x0000152D 
-1 -> 0xFFFFFFFF 
1 -> 0x00000001 

Również mam liczb zmiennoprzecinkowych, takich jak 1.2, 58.654:

8.25f -> 0x41040000 
8.26 -> 0x410428f6 
0.7 -> 0x3f333333 

muszę konwertuj oba typy liczb do ich wersji szesnastkowej, ale muszą one mieć dokładnie cztery bajty długości (cztery pary cyfr szesnastkowych).

Czy ktoś wie, jak to jest możliwe w Javie? Proszę pomóż.

+0

Jestem zdezorientowany. Reprezentacja w formacie szesnastkowym 8.25 powinna mieć postać "0x1.08p3", a nie "0x41040000". W rzeczywistości '0x41040000' jest liczbą całkowitą' 1090781184''s hex reprezentacji. –

+0

Mam go jako numery fp IEEE754. – user35443

Odpowiedz

23

Oto dwie funkcje, jedną dla liczby całkowitej, po jednym dla pływaka.

public static String hex(int n) { 
    // call toUpperCase() if that's required 
    return String.format("0x%8s", Integer.toHexString(n)).replace(' ', '0'); 
} 

public static String hex(float f) { 
    // change the float to raw integer bits(according to the OP's requirement) 
    return hex(Float.floatToRawIntBits(f)); 
} 
+1

Dobra odpowiedź, daje wiodącym 0 zgodnie z życzeniem. –

+0

Co powiesz na pływaki? – user35443

+0

@ user35443 floats są różne, czy w pytaniu możesz dodawać sample do floats? –

3

Zastosowanie

String hex = Integer.toHexString(5421).toUpperCase(); // 152D 

Aby dostać się z wiodącymi zerami

String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase(); 
+2

'System.out.println (Integer.toHexString (5421));' -> 152d –

+0

Dokumentacja java mówi, że daje bez zer wiodących. –

+1

@SriHarshaChilakapati, ale OP wymaga zer wiodących. –

4

Tu jest dla pływaków:

System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f)); 
8

Dla liczb całkowitych, jest jeszcze łatwiejszy sposób. Użyj wielkiej litery "X", jeśli chcesz, aby część alfa liczby heksadecymalnej była wielka, w przeciwnym razie użyj "x" dla małych liter. "0" w formatyzatorze oznacza utrzymywanie początkowych zer.

public static String hex(int n) 
{ 
    return String.format("0x%04X", n); 
}