Wie konvertiere ich in JavaScript von Hex
String zu ASCII
String?
Ex:
32343630 wird es 2460 sein
javascript
Q8Y
quelle
quelle
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'
quelle
console.log(hex2a('32343630') === hex2a('3234363000')); // returns 'true'!!!
.&& hex.substr(i, 2) !== '00'
. Wie @steinybot bemerkt hat, bricht dies beim ersten Mal ab0
und 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; }
NUL
Fehler 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
quelle
hex
Wert zwischen 0x0 und 0x9 liegt. Dafür ändere ich deinearr.push(hex)
zuarr.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
quelle
output
output.toString()
new Buffer(input,"hex").toString()
gibt die ursprüngliche Saite ausSie können dies verwenden ..
var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){ return String.fromCharCode(parseInt(v, 16)); }).join(''); document.write(asciiVal);
quelle
Ich habe eine nützliche Funktion in der web3- Bibliothek gefunden.
var hexString = "0x1231ac" string strValue = web3.toAscii(hexString)
quelle
** 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");
quelle
Buffer
es 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) oder03
(ETX) befassen müssen. Alles darunter10
wird 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
hexToAscii
Funktion 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
hexToAscii
Funktion auf 'Nachricht' aufDieser 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!
quelle
console.log( "68656c6c6f20776f726c6421".match(/.{1,2}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"") )
quelle
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
quelle