Convertir ASCII a hexadecimal en JavaScript

Nithin Krishnan 12 octubre 2023
  1. Convertir un carácter ASCII en hexadecimal en JavaScript
  2. Conversión de una cadena de ASCII en equivalente hexadecimal en JavaScript
  3. Convertir hexadecimal de nuevo a ASCII
Convertir ASCII a hexadecimal en JavaScript

La principal intención de desarrollar el Código Estándar Americano para el Intercambio de Información (ASCII) era intercambiar datos entre dispositivos. ASCII es una tabla de códigos que tiene caracteres legibles por humanos y consta de cada carácter asignado a números específicos (los llamados códigos ASCII). Al igual que los sistemas numéricos de base binaria utilizados por las computadoras, utilizamos sistemas numéricos hexadecimales mientras transmitimos datos a través de un canal para una comunicación sin errores. ASCII es un formato legible por humanos, que las computadoras utilizan internamente de manera diferente. Veamos cómo podemos convertir un valor ASCII en un valor hexadecimal con JavaScript.

Convertir un carácter ASCII en hexadecimal en JavaScript

La conversión es fácil y no requiere muchos pasos en el código. Veamos el código para convertir un carácter ASCII en hexadecimal.

window.onload =
    function() {
  convertASCIItoHex('A');
  convertASCIItoHex('n');
  convertASCIItoHex('!');
}

function convertASCIItoHex(asciiVal) {
  let asciiCode = asciiVal.charCodeAt(0);
  let hexValue = asciiCode.toString(16);
  console.log('0x' + hexValue);
}

Producción :

0x41
0x6e
0x21

En esta sección, estamos tratando con la conversión de un carácter ASCII en su equivalente hexadecimal. Tenemos el proceso de conversión explicado a continuación.

  • En la función window.onload() de javascript, llamamos a la función convertASCIItoHex() para traducir el valor ASCII a hexadecimal en javascript. La función window.onload() se llama al cargar la página para que la función se ejecute tan pronto como se cargue la página.
  • En la función convertASCIItoHex(), pasamos el valor ASCII que necesita ser convertido. asciiVal.charCodeAt(0) devuelve el código ASCII del valor de entrada pasado en la función convertASCIItoHex() como parámetro. La tabla ASCII contiene una asignación al formato de letra legible por humanos y un código asociado con ellos. Se parece a lo siguiente.
    DECIMAL HEXCODE Símbolo Descripción
    sesenta y cinco 41 A Mayúscula A
    66 42 B Mayúscula B
    67 43 C Mayúscula C
    68 44 D Mayúscula D
    69 45 mi Mayúscula E
    70 46 F Mayúscula F
    71 47 GRAMO G mayúscula
    72 48 H H mayúscula
    73 49 I I mayúscula
    74 4A J Mayúscula J
    La columna decimal representa el código del valor ASCII. Por ejemplo, el código ASCII para A es 65. La función asciiVal.charCodeAt(0) devuelve el valor ASCII de asciiVal que contiene el valor A. Por lo tanto, devuelve 65. Almacenamos el código ASCII en la variable asciiCode.
  • Una vez que obtenemos el código ASCII correspondiente al valor del parámetro, nuestro siguiente paso es convertirlo en hexadecimal. En el fragmento asciiCode.toString(16), la función .toString(16) devuelve el valor hexadecimal como una cadena. Almacenamos el valor de la cadena hexadecimal en la variable hexValue.
  • En el paso final, consolamos el equivalente hexadecimal del atributo pasado usando la función console.log() de JavaScript.

Nota

  • Puede parecer extraño agregar la palabra clave 0x al valor hexadecimal convertido. Es un enfoque común seguido en javascript para identificar el número como un valor hexadecimal (consulte MSDN Docs para obtener más detalles). Para su propósito comercial, podemos evitarlo y seguir la salida de valor hexadecimal de la función .toString(16).

  • La función toString(16) es una función multipropósito en javascript. Podemos usarlo para convertir a diferentes sistemas de base numérica. Necesitamos pasar la base decimal o la raíz como parámetro a la función. Si esperamos un equivalente binario del código ASCII, entonces la función toString(2) devolverá el equivalente binario del valor decimal. La función convertirá el objeto en una cadena antes de devolver el valor binario. Y por lo tanto, el tipo de retorno de .toString() es cadena.

  • El código anterior considera solo la conversión de un carácter. Por lo tanto, si proporciona una cadena como entrada como convertASCIItoHex("HELLO"), la función devolverá el valor hexadecimal de la primera letra “H”. Se realiza mediante la función charCode(0) en asciiVal.charCodeAt(0).

Conversión de una cadena de ASCII en equivalente hexadecimal en JavaScript

Los requisitos más comunes que tenemos en nuestras vidas son convertir una cadena en su totalidad en el valor equivalente hexadecimal en lugar de un carácter. El siguiente programa toma una cadena como entrada y devuelve una cadena de equivalente hexadecimal para cada carácter como salida. Cada valor hexadecimal estará separado por ' ' un espacio para una mejor legibilidad y comprensión.

window.onload =
    function() {
  convertASCIItoHex('Hello!');
  convertASCIItoHex('Good Morning World!!');
}

function convertASCIItoHex(asciiString) {
  let hex = '';
  let tempASCII, tempHex;
  asciiString.split('').map(i => {
    tempASCII = i.charCodeAt(0)
    tempHex = tempASCII.toString(16);
    hex = hex + tempHex + ' ';
  });
  hex = hex.trim();
  console.log(hex);
}

Producción :

48 65 6c 6c 6f 21
47 6f 6f 64 20 4d 6f 72 6e 69 6e 67 20 57 6f 72 6c 64 21 21

Aquí, convertASCIItoHex() devuelve un valor de cadena hexadecimal correspondiente a la entrada de cadena proporcionada. Devolverá un valor de tipo String. La cadena de códigos hexadecimales está separada por espacios para mayor legibilidad y claridad. Veamos los pasos que seguimos.

  • Como se discutió en la sección anterior, llamamos a la función window.onload() de javascript y luego llamamos a la función convertASCIItoHex("Hello!") Pasando una cadena "Hello!" como parámetro para ello.
  • En la función convertASCIItoHex(), dividimos la cadena de entrada en caracteres para facilitar su procesamiento. Por lo tanto, en esta fase, la cadena "Hello!" Se convierte en ["H", "e", "l", "l", "o", "!"], un array de cadenas.
  • A continuación, aplicamos “la conversión de ASCII a hexadecimal” en cada elemento del array con el operador .map() de javascript. Repite cada elemento y ejecuta una función en cada uno de ellos. Pasamos la función como una función en línea o una función de flecha.
  • En la función, usamos charCodeAt(0) para obtener el código ASCII del elemento de array actual. Luego, en el objeto de código ASCII, aplicamos toString(16) para convertir el valor ASCII a una base hexadecimal. Luego empujamos el valor hexadecimal a el array hexadecimal, el array de salida. Tenga en cuenta que usamos un espacio entre la conversión consecutiva por motivos de legibilidad. También puede preferir utilizar , o ; separador según las necesidades del negocio.
  • Con hex = hex + tempHex + ' ' agregamos un espacio después de cada conversión de elemento. Por lo tanto, el resultado final tendrá un espacio final. Para eliminar eso, usamos la función .trim() de javascript.
  • Finalmente, el array de cadenas convertida se registra en la consola con console.log(hex).

Convertir hexadecimal de nuevo a ASCII

Ahora que tenemos listos los valores hexadecimales, la pregunta que surge es cómo confirmamos que la salida es la esperada. Logramos el núcleo de la funcionalidad con la función fromCharCode(ASCIICode) de javascript que devuelve el carácter ASCII correspondiente al código ASCII pasado en el parámetro. Aquí, podemos usar el siguiente código.

window.onload = function() {
  convertASCIItoHex('48 65 6c 6c 6f 21');
  convertASCIItoHex(
      '47 6f 6f 64 20 4d 6f 72 6e 69 6e 67 20 57 6f 72 6c 64 21 21');
} function convertHexToASCII(hexString) {
  let stringOut = '';
  hexString.split(' ').map((i) => {
    tempAsciiCode = parseInt(i, 16);
    stringOut = stringOut + String.fromCharCode(tempAsciiCode);
  });
  console.log(stringOut);
}

Producción :

Hello!
Good Morning World!!

Un par de métodos hacen la magia aquí. parseInt(i, 16) convierte una entrada de base 16 a base decimal. Por lo tanto, con este método, obtenemos el código ASCII para el valor hexadecimal. Y el String.fromCharCode(tempAsciiCode) toma el código ASCII pasado como parámetro a esta función y devuelve el carácter ASCII correspondiente al código.

Observaciones

  • La forma de ASCII legible por humanos más utilizada incluye alfabetos, números y caracteres especiales. Con los códigos javascript, pretendemos cubrir estos conjuntos de caracteres. No podemos probar ciertos códigos ASCII en JavaScript, como ACK: carácter de reconocimiento, ETX: carácter de fin de texto, etc.
  • La variable de cadena de JavaScript puede contener una longitud máxima de 253-1 caracteres según los estándares ES8. Y eso equivale a aproximadamente 512 MB de datos en Chrome y alrededor de un Gigabyte de datos en Firefox. Por lo tanto, podemos convertir valores de cadena más largos usando nuestro código.