Cómo convertir de Hexcadena aASCII cadena en JavaScript?
Ex:
32343630 será 2460
javascript
Q8Y
fuente
fuente

Array.prototype.{map,forEach}()para navegadores obsoletos / limitados. Honestamente, esto parece más el reino de Underscore.js .Respuestas:
function hex2a(hexx) { var hex = hexx.toString();//force conversion var str = ''; for (var i = 0; (i < hex.length && hex.substr(i, 2) !== '00'); i += 2) str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); return str; } hex2a('32343630'); // returns '2460'fuente
console.log(hex2a('32343630') === hex2a('3234363000')); // returns 'true'!!!.&& hex.substr(i, 2) !== '00'. Como notó @steinybot, esto aborta en el primero0y, por lo tanto, no convierte completamente hexadecimal en cadena. La solución correcta es: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; }NULdefecto se agregó a propósito. Esta respuesta se ha dañado.En aras de la integridad, 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 32343630fuente
hexvalor esté entre 0x0 y 0x9. Para esto, cambio tuarr.push(hex)aarr.push(hex.length > 1 && hex || "0" + hex);.toString(16)(línea no. 4). ;-)Otra forma de hacerlo (si usa Node.js):
var input = '32343630'; const output = Buffer.from(input, 'hex'); log(input + " -> " + output); // Result: 32343630 -> 2460fuente
outputa ASCII, useoutput.toString()new Buffer(input,"hex").toString()entrega la cadena originalPuedes usar esto ...
var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){ return String.fromCharCode(parseInt(v, 16)); }).join(''); document.write(asciiVal);fuente
Encontré una función útil presente en la biblioteca web3 .
var hexString = "0x1231ac" string strValue = web3.toAscii(hexString)fuente
** para Hexa a Cadena **
let input = '32343630';Nota: let output = new Buffer (input, 'hex'); // esto está desaprobado
let buf = Buffer.from(input, "hex"); let data = buf.toString("utf8");fuente
Bufferno existe en JavaScript normal. Espero que el voto negativo se deba a que la pregunta está etiquetada con JavaScript y no con Node.js.Descubrí que la solución anterior no funcionará si tiene que lidiar con caracteres de control como
02(STX) o03(ETX), todo10lo que esté debajo se leerá como un solo dígito y eliminará todo lo que sigue. Me encontré con este problema al intentar analizar las comunicaciones en serie. Entonces, primero tomé la cadena hexadecimal recibida y la puse en un objeto de búfer, luego convertí la cadena hexadecimal en una matriz de cadenas de la siguiente manera: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. Únete
message = msgArray.join('');luego creé una
hexToAsciifunción como en la respuesta de @Delan Azabani anterior ...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; }luego llamó a la
hexToAsciifunción en 'mensaje'Este enfoque también me permitió iterar a través de la matriz y dividir las diferentes partes de la transmisión utilizando los caracteres de control para luego poder tratar solo con la parte de los datos que quería. ¡Espero que esto ayude a alguien más!
fuente
console.log( "68656c6c6f20776f726c6421".match(/.{1,2}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"") )fuente
Una versión optimizada de la implementación de la función inversa propuesta por @michieljoris (según los comentarios de @Beterraba y @Mala):
function a2hex(str) { var hex = ''; for (var i = 0, l = str.length; i < l; i++) { var hexx = Number(str.charCodeAt(i)).toString(16); hex += (hexx.length > 1 && hexx || '0' + hexx); } return hex; } alert(a2hex('2460')); // display 32343630fuente