# hex- Stirng in einen float umwandeln



## e9926044 (9. Jun 2008)

Hallo,

weiß jemand eine Methode, der ich einen hex- String übergebe und die mir den floatw- Wert dieses hex- Stringes zurückliefert, 

So in der Art: 


"47 70 B4 00" übergeben und dann die float-. Zahl, die diesen Wert repräsentiert zurückliefen,

Vielleicht weiß ja jemand was,


----------



## SlaterB (9. Jun 2008)

Integer.parseInt, mit 8 Hex-Ziffern bis du da wohl gerade noch im Wertebereich,
Long.parseLong dürfte 16 Ziffern akzeptieren


----------



## thE_29 (9. Jun 2008)

Integer.parseInt(STRING, 16)

So könntest mal den Int wert haben! Float kann hex sowieso nicht abgespeichert werden. Außer es ist im HexString ein PUNKT oder KOMMA abgespeichert.

Edit: Ok, nach nem Standard (fixdefinierte Länge) gehts halt schon


----------



## e9926044 (9. Jun 2008)

Nö, vielleicht hab ich mich da falsch ausgedrückt, ich möchte aus meinen HEX- String einen Float haben, also der hex- String gehört mittels "IEEE754" in eine float- Zahl umgewandelt, 
gibts dafür eine Methode oder sowas?

also aus dem hex- String müsste ich 61620,0 zurückbekommen.


----------



## SlaterB (9. Jun 2008)

einen Integer könntest du ja zum Float weiterverarbeiten,
wäre unnötig, sowas doppelt zu programmieren,

4770B4 ist übrigens 4681908, mit zwei Nullen dran noch viel mehr


----------



## tfa (9. Jun 2008)

Möglicherweise hilft dir die Methode Float.intBitsToFloat(int).
Also erst den Hex-String in int, dann den int in float umwandeln.


----------



## e9926044 (9. Jun 2008)

Hat geholfen!! Danke


----------



## Siassei (9. Jun 2008)

Hallo,

kennt eigentlich einer von euch BigDecimal?


> Also erst den Hex-String in int, dann den int in float umwandeln.


Der große Nachteil bei dieser Methode liegt in der Begrenzung auf eine 32bit Fließkommazahl
-> Vorher muss der Hex-String auf einen möglichen Überlauf geprüft werden
oder: das ganze in einen try-Block packen


----------



## tfa (9. Jun 2008)

Siassei hat gesagt.:
			
		

> Hallo,
> 
> kennt eigentlich einer von euch BigDecimal?
> 
> ...


Darum geht es nicht. Es soll die Hex-Darstellung eines Floats in float zurück gewandelt werden.
BigDecimal hilft da nicht weiter.


----------



## Siassei (9. Jun 2008)

tfa hat gesagt.:
			
		

> Darum geht es nicht. Es soll die Hex-Darstellung eines Floats in float zurück gewandelt werden.
> BigDecimal hilft da nicht weiter.


Ach so  

Aber ich verstehe dann diese Aussage nicht


			
				thE_29 hat gesagt.:
			
		

> Float kann hex sowieso nicht abgespeichert werden. Außer es ist im HexString ein PUNKT oder KOMMA abgespeichert.


Jede Zahl mit der Basis n kann zur Basis k gewandelt werden. Dein Computer rechnet alles mit der Basis 2  :wink: 
Ich rechne dir das mal vor und du wirst sehen, dass eine eigene Implementation kein Problem ist und für mich in die Rubrik der Hausaufgaben gehört . Oftmals verbringen wir mehr Zeit mit dem durchsuchen von API's und Diskutieren als man für eine eigene Impl. benötigen würde.

Also eine float -> 32bit Gleitkommazahl besitzt eine 23bit Mantisse und einen 8bit Exponent = 31bit. Wofür das letzte Bit benutzt wird über lasse ich euch 

Dual: (0)00100111011010110101011 01010011
Hex: Hexadezimalsystem [1] besitzt die Basis 16 -> für die Darstellung einer Zahl werden genau 4bit's benötigt.
So, nun teilen wir das ganze in 4 Blöcke auf

0001 0011 1011 0101 1010 1011 0101 0011
woraus wir folgende Hexadezimalzahl ableiten
13B5AB53

das ganze geht natürlich auch umgekehrt.

[1] Hexadezimalsystem
[2] Zahlbasiswechsel


----------

