Cómo convertir de Hexcadena aASCII cadena en JavaScript?
Ex:
32343630 será 2460
Cómo convertir de Hexcadena aASCII cadena en JavaScript?
Ex:
32343630 será 2460
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'
console.log(hex2a('32343630') === hex2a('3234363000')); // returns 'true'!!!.
&& hex.substr(i, 2) !== '00'. Como notó @steinybot, esto aborta en el primero 0y, 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 32343630
hexvalor esté entre 0x0 y 0x9. Para esto, cambio tu arr.push(hex)a arr.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
outputa ASCII, useoutput.toString()
new Buffer(input,"hex").toString()entrega la cadena original
Puedes usar esto ...
var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){
return String.fromCharCode(parseInt(v, 16));
}).join('');
document.write(asciiVal);
** 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");
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) o 03(ETX), todo 10lo 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'
message = hexToAscii(message);
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!
console.log(
"68656c6c6f20776f726c6421".match(/.{1,2}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"")
)
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