Hexadezimalwert in float umwandeln
mido
- javascript
0 wahsaga0 Thomas Meinike0 mido0 Thomas Meinike0 mido
Hallo Forum,
ich habe folgendes Problem:
Ich habe Gerät mit integriertem Webserver, der mir Messwerte im Hex-Format liefert.
Wie kann ich diese Werte mit Java-Script in Gleitpunktzahlen umwandeln ?
hi,
Ich habe Gerät mit integriertem Webserver, der mir Messwerte im Hex-Format liefert.
Wie kann ich diese Werte mit Java-Script in Gleitpunktzahlen umwandeln ?
hm, brauchst du wirklich dezimalzahlen, oder reichen dir integers?
für letztere würde sich parseInt() mit entsprechend gesetztem zweitem parameter anbieten, um von HEX in DEC umzurechnen.
gruß,
wahsaga
Hallo,
Ich habe Gerät mit integriertem Webserver, der mir Messwerte im Hex-Format liefert.
Wie kann ich diese Werte mit Java-Script in Gleitpunktzahlen umwandeln ?
Das sollte kein Problem sein -- aber dazu muesste man zunaechst das Format kennen. Vermutlich ist es ein IEEE-Format, aber welches [typisch sind 32 Bit, 64 Bit, 80 Bit, 128 Bit wobei das auch noch nach OS differiert (Single, Double, Extended)]?
Gib mal ein Beispiel an.
MfG, Thomas
Hallo,
Ich habe Gerät mit integriertem Webserver, der mir Messwerte im Hex-Format liefert.
Wie kann ich diese Werte mit Java-Script in Gleitpunktzahlen umwandeln ?
Das sollte kein Problem sein -- aber dazu muesste man zunaechst das Format kennen. Vermutlich ist es ein IEEE-Format, aber welches [typisch sind 32 Bit, 64 Bit, 80 Bit, 128 Bit wobei das auch noch nach OS differiert (Single, Double, Extended)]?
Gib mal ein Beispiel an.
MfG, Thomas
Hallo Thomas,
bei dem Format handelt es sich um ein 32 Bit Format. Das Format müsste Single sein.
Beispiel: 4133851F hex entspricht 11,22 als Gleitpunktzahl.
MfG, mido
Hallo,
bei dem Format handelt es sich um ein 32 Bit Format. Das Format müsste Single sein.
Beispiel: 4133851F hex entspricht 11,22 als Gleitpunktzahl.
Nach dem Aufbau von Gleitkommazahlen nach IEEE 754 sollte diese JS-Funktion zum Ziel fuehren:
function IEEE754_Hex32ToDez(hexstr)
{
var dez,bin1,bin2,bin3,bin4,bin,sign,expo,mant,nul8="00000000";
bin1=nul8+parseInt(hexstr.substr(0,2),16).toString(2);
bin2=nul8+parseInt(hexstr.substr(2,2),16).toString(2);
bin3=nul8+parseInt(hexstr.substr(4,2),16).toString(2);
bin4=nul8+parseInt(hexstr.substr(6,2),16).toString(2);
bin1=bin1.substr(bin1.length-8,8);
bin2=bin2.substr(bin2.length-8,8);
bin3=bin3.substr(bin3.length-8,8);
bin4=bin4.substr(bin4.length-8,8);
bin=bin1+bin2+bin3+bin4;
sign=parseInt(bin.charAt(0),2); // Vorzeichen
expo=parseInt(bin.substr(1,8),2); // Exponent
mant=parseInt(bin.substr(9,23),2); // Mantisse
dez=(1-2*sign)*Math.pow(2,expo-127)*(1+mant/Math.pow(2,23));
return(dez.toFixed(8));
}
alert(IEEE754_Hex32ToDez("4133851F")); // 11.22000027
MfG, Thomas
Hallo Thomas,
vielen Dank. Die Funktion funktioniert einwandfrei.
Hast du eventuell auch ein Script das die Umwandlung in umgekehrter Richtung macht ?
MfG
mido
Hallo,
Hast du eventuell auch ein Script das die Umwandlung in umgekehrter Richtung macht ?
Schau mal hier vorbei: IEEE-754 Floating-Point Conversion. Dort gibt es am Ende auch einen Verweis zur Umwandlung Hex --> Dez, die noch weitaus umfangreicher ausfaellt als der von mir probierte Ansatz.
MfG, Thomas