es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Javascript – Convertir hexadecimal a precisión doble IEEE-754 de 64 bits

Estoy tratando de convertir la siguiente cadena hexadecimal: “40934B999999999A” a 1234.9 (float-64).

Busqué varias soluciones publicadas en internet, pero la mayoría eran solo códigos que daban respuestas diferentes a lo que necesitaba, como cambiar de hex a tipo float.

Debido a que estoy usando una solución heredada, estoy en un entorno en el que no puedo utilizar la sintaxis es6 o superior (por ejemplo, DataView o Int16Array).

¿Cómo puedo obtener una función javascript que me dé la respuesta que necesito?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para convertir la cadena de texto hexadecimal “40934B999999999A” a un float-64 en JavaScript, puedes utilizar la siguiente función:

    function hexToFloat64(hexString) {
      const hexArray = hexString.match(/.{1,2}/g).map(hex => parseInt(hex, 16));
      const buffer = new ArrayBuffer(8);
      const uint8 = new Uint8Array(buffer);
      const float64 = new Float64Array(buffer);
    
      for (let i = 0; i < hexArray.length; i++) {
        uint8[i] = hexArray[i];
      }
    
      return float64[0];
    }
    
    // uso
    const hexString = "40934B999999999A";
    const float64 = hexToFloat64(hexString);
    console.log(float64); // 1234.9
    

    Esta función primero convierte la cadena de texto hexadecimal a un array de enteros utilizando expresiones regulares y la función parseInt. Luego, crea un ArrayBuffer de 8 bytes y un Uint8Array para escribir los valores hexadecimales. Finalmente, crea un Float64Array y lee el valor de punto flotante del buffer.

    Ten en cuenta que esta función solo funciona en entornos little-endian.

Comments are closed.