2010-09-19 21 views
53

Cómo convertir de cadena Hex a ASCII cadena en JavaScript?Cómo convertir de Hex a ASCII en JavaScript?

Ex:

32343630 será 2460

+6

Estoy seguro de que hay un plugin de jQuery para que ^^ – AndiDog

+2

jQuery se entiende principalmente para la manipulación DOM y, en menor medida, reimplementar cosas como 'Array.prototype. {Mapa, forEach}()' para anticuados/navegadores limitados. Honestamente, esto se parece más al reino de [Underscore.js] (http://underscorejs.org/). –

+0

@AndiDog No es útil para aquellos de nosotros que usamos el nodo –

Respuesta

114
function hex2a(hexx) { 
    var hex = hexx.toString();//force conversion 
    var str = ''; 
    for (var i = 0; i < hex.length; i += 2) 
     str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 
    return str; 
} 
hex2a('32343630'); // returns '2460' 
32

Por el amor integridad de la función inversa:

function a2hex(str) { 
    var arr = []; 
    for (var i = 0, l = str.length; i < l; i ++) { 
    var hex = Number(str.charCodeAt(i)).toString(16); 
    arr.push(hex); 
    } 
    return arr.join(''); 
} 
a2hex('2460'); //returns 32343630 
+2

Una nota sobre esta implementación: debe insertar manualmente un "0" cuando el valor 'hex 'está entre 0x0 y 0x9. Para esto, cambio su 'arr.push (hex)' a 'arr.push (hex.length> 1 && hex ||" 0 "+ hex);'. – Beterraba

+0

La concatenación de cadenas es en realidad más rápida que la construcción de cadenas de matrices y se une en javascript – Mala

+0

Tiene un error tipográfico, se olvidó de poner el paréntesis de cierre después de 'toString (16)' (línea no.4). ;-) – Arjun

10

Se puede usar esta ..

var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){ 
 
     return String.fromCharCode(parseInt(v, 16)); 
 
    }).join(''); 
 
    
 
document.write(asciiVal);

7

Otra manera de hacerlo (si utiliza Node.js):

var input = '32343630'; 
var output = new Buffer(input, 'hex'); 
log(input + " -> " + output); // Result: 32343630 -> 2460 
0

he encontrado que la solución anterior no funcionará si usted tiene que tratar con caracteres de control como 02 (STX) o 03 (ETX), cualquier cosa menor de 10 se leerá como un solo dígito y arrojará todo después. Me encontré con este problema tratando de analizar a través de comunicaciones en serie. Por lo tanto, lo primero que tomó la cadena hexadecimal recibido y lo puso en un objeto de memoria intermedia convierte entonces la cadena hexadecimal en una matriz de las cadenas al igual que

buf = Buffer.from(data, 'hex'); 
 
l = Buffer.byteLength(buf,'hex'); 
 
for (i=0; i<l; i++){ 
 
char = buf.toString('hex', i, i+1); 
 
msgArray.push(char);

Entonces .join que

message = msgArray.join('');

entonces creé una función hexToAscii al igual que en @Del La respuesta de un Azabani arriba ...

function hexToAscii(str){ 
 
    hexString = str; 
 
    strOut = ''; 
 
     for (x = 0; x < hexString.length; x += 2) { 
 
      strOut += String.fromCharCode(parseInt(hexString.substr(x, 2), 16)); 
 
     } 
 
    return strOut;  
 
}

continuación, llama a la función hexToAscii el 'mensaje'

message = hexToAscii(message);

Este enfoque también permitió que iterar a través de la matriz y cortar en las diferentes partes de la transmisión usando los caracteres de control para poder tratar solo con la parte de los datos que quería. ¡Espero que esto ayude a alguien más!

1

Encontré una función útil presente en la biblioteca web3.

var hexString = "0x1231ac" 
string strValue = web3.toAscii(hexString)