Cómo convertir de Hex
cadena 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 primero0
y, 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; }
NUL
defecto 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 32343630
fuente
hex
valor 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 -> 2460
fuente
output
a 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
Buffer
no 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), todo10
lo 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
hexToAscii
funció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
hexToAscii
funció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 32343630
fuente