mido: Hexadezimalwert in float umwandeln

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 ?

  1. 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

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. 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

    1. 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

      1. 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

        1. Hallo Thomas,

          vielen Dank. Die Funktion funktioniert einwandfrei.
          Hast du eventuell auch ein Script das die Umwandlung in umgekehrter Richtung macht ?

          MfG

          mido

          1. 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