Wie konvertiere ich in JavaScript von HexString zu ASCIIString?
Ex:
32343630 wird es 2460 sein
Wie konvertiere ich in JavaScript von HexString zu ASCIIString?
Ex:
32343630 wird es 2460 sein
Array.prototype.{map,forEach}()für veraltete / eingeschränkte Browser gedacht . Ehrlich gesagt scheint dies eher das Reich von Underscore.js zu sein .
Antworten:
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'. Wie @steinybot bemerkt hat, bricht dies beim ersten Mal ab 0und konvertiert daher Hex nicht vollständig in String. Die richtige Lösung ist: 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; }
NULFehler absichtlich hinzugefügt wurde. Diese Antwort wurde beschädigt.
Der Vollständigkeit halber die umgekehrte Funktion:
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
hexWert zwischen 0x0 und 0x9 liegt. Dafür ändere ich deine arr.push(hex)zu arr.push(hex.length > 1 && hex || "0" + hex);.
toString(16)(Zeile Nr. 4) zu setzen. ;-)
Eine andere Möglichkeit (wenn Sie Node.js verwenden):
var input = '32343630';
var output = new Buffer(input, 'hex');
log(input + " -> " + output); // Result: 32343630 -> 2460
outputoutput.toString()
new Buffer(input,"hex").toString()gibt die ursprüngliche Saite aus
Sie können dies verwenden ..
var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){
return String.fromCharCode(parseInt(v, 16));
}).join('');
document.write(asciiVal);
** für Hexa zu String **
let input = '32343630';
Hinweis: let output = new Buffer (Eingabe, 'hex'); // das ist veraltet
let buf = Buffer.from(input, "hex");
let data = buf.toString("utf8");
Bufferes in normalem JavaScript nicht existiert. Ich gehe davon aus, dass die Ablehnung darauf zurückzuführen ist, dass die Frage mit JavaScript und nicht mit Node.js versehen ist.
Ich habe festgestellt, dass die obige Lösung nicht funktioniert, wenn Sie sich mit Steuerzeichen wie 02(STX) oder 03(ETX) befassen müssen. Alles darunter 10wird als einzelne Ziffer gelesen und wirft danach alles weg. Ich bin auf dieses Problem gestoßen, als ich versucht habe, die serielle Kommunikation zu analysieren. Also habe ich zuerst die empfangene Hex-Zeichenfolge genommen und in ein Pufferobjekt eingefügt und dann die Hex-Zeichenfolge in ein Array der folgenden Zeichenfolgen konvertiert:
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);
}
Dann mach mit
message = msgArray.join('');
dann habe ich eine hexToAsciiFunktion erstellt, genau wie in der obigen Antwort von @Delan Azabani ...
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;
}
rief dann die hexToAsciiFunktion auf 'Nachricht' auf
message = hexToAscii(message);
Dieser Ansatz ermöglichte es mir auch, das Array zu durchlaufen und mithilfe der Steuerzeichen in die verschiedenen Teile der Übertragung zu schneiden, sodass ich dann nur den Teil der Daten verarbeiten konnte, den ich wollte. Hoffe das hilft jemand anderem!
console.log(
"68656c6c6f20776f726c6421".match(/.{1,2}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"")
)
Eine optimierte Version der von @michieljoris vorgeschlagenen Implementierung der Umkehrfunktion (gemäß den Kommentaren von @Beterraba und @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