2009-07-02 4 views
6

Come convertire la stringa esadecimale in virgola mobile a precisione singola in Java?Come convertire la stringa esadecimale in float in Java?

Ad esempio, come implementare:

float f = HexStringToFloat ("BF800000"); // f ora dovrebbe contenere -1.0

Lo chiedo perché ho provato:

float f = (float)(-1.0); 
String s = String.format("%08x", Float.floatToRawIntBits(f)); 
f = Float.intBitsToFloat(Integer.valueOf(s,16).intValue()); 

Ma ho la seguente eccezione:

java.lang.NumberFormatException: Per stringa di input: "bf800000 "

risposta

16
public class Test { 
    public static void main (String[] args) { 

     String myString = "BF800000"; 
     Long i = Long.parseLong(myString, 16); 
     Float f = Float.intBitsToFloat(i.intValue()); 
     System.out.println(f); 
     System.out.println(Integer.toHexString(Float.floatToIntBits(f))); 
    } 
} 
+0

ottengo: java.lang.NumberFormatException: Per stringa di input: "BF800000" – apalopohapa

+0

Quando il test: Float.intBitsToFloat (Integer.valueOf ("BF800000", 16) .intValue()); Ho ottenuto l'eccezione: java.lang.NumberFormatException: per stringa di input: "BF800000" – apalopohapa

+0

È un overflow di un int. Passare a Long.valueOf (myString, 16) non genera l'eccezione, ma restituisce -1,0 invece di 10,0. Sei sicuro che 10.0 sia il risultato corretto? –

2

è necessario convertire il valore esadecimale per un int (lasciato come esercizio) e quindi utilizzare Float.intBitsToFloat(int)