2013-02-03 10 views
10

Ho un piccolo problema. Ho numeri come 5421, -1 e 1. devo stamparli in quattro byte, come:Numero esadecimale a quattro byte di stampa Java

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

Inoltre numeri in virgola, ho galleggianti come 1,2, 58,654:

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

devo convertire entrambi i tipi di numeri nella loro versione esadecimale, ma devono essere esattamente lunghi quattro byte (quattro coppie di cifre esadecimali).

Qualcuno sa come è possibile in Java? Per favore aiuto.

+0

Sono confuso. La rappresentazione esadecimale di '8.25' dovrebbe essere' 0x1.08p3', non '0x41040000'. Infatti, '0x41040000' è la rappresentazione esadecimale di' intero 1090781184'. –

+0

Lo ho come IpFax IEEE754. – user35443

risposta

23

Ecco due funzioni, una per intero, uno per galleggiante.

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

Bella risposta, dà gli 0 iniziali come richiesto. –

+0

E i galleggianti? – user35443

+0

@ user35443 i float sono diversi, puoi aggiungere campioni per i float nella tua domanda? –

3

Uso

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

di ottenere con zeri

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

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

+0

Il documento java dice che fornisce senza zeri iniziali. –

+1

@SriHarshaChilakapati ma l'OP richiede gli zeri iniziali. –

4

Qui è per i galleggianti:

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

per gli interi, c'è un modo ancora più semplice. Usa la 'X' maiuscola se vuoi che la parte alfa del numero esadecimale sia maiuscola, altrimenti usa 'x' per lettere minuscole. Lo "0" nel formattatore significa mantenere gli zeri iniziali.

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