Byte-array in Hex-Umwandlung von Strings in javascript
Ich habe ein byte-array der form [4,-101,122,-41,-30,23,-28,3,..]
die ich konvertieren möchten, in form 6d69f597b217fa333246c2c8
Ich bin mit unter-Funktion
function toHexString(bytes) {
return bytes.map(function(byte) {
return (byte & 0xFF).toString(16)
}).join('')
}
gibt mir einen string von der gleichen form, aber ich vermute, dass es nicht um eine effiziente Konvertierung, da der hex-string ist etwas kürzer als erwartet. Ich denke, die übersetzung sollte get "0a10a6dc".
Sagen Sie mir bitte, wenn ich falsch bin, oder ist das eine richtige Umstellung, aber vielleicht bin ich nicht die richtige byte-array
byte-array 4,-127,45,126,58,-104,41,-27,-43,27,-35,100,-50,-77,93,-16,96,105,-101,-63,48,-105,49,-67,110,111,26,84,67,-89,-7,-50,10,-12,56,47,-49,-42,-11,-8,-96,-117,-78,97,-105,9,-62,-44,-97,-73,113,96,23,112,-14,-62,103,-104,90,-14,117,78,31,-116,-7
Entsprechende Konvertierung 4812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ceaf4382fcfd6f5f8a08bb261979c2d49fb771601770f2c267985af2754e1f8cf9
InformationsquelleAutor Actung | 2015-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen fehlt die Polsterung im hex-Wandlung. Sie wollen zu verwenden
so, dass jedes byte-Transformationen mit genau zwei hex-Ziffern. Ihre erwartete Ausgabe wäre
04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9
Das wird nicht funktionieren, wenn byteArray ist ein Typ-array kann nicht in string-Werte: wenn Sie eine Uint8Array, das Ergebnis der map wird auch ein Uint8Array, so ein Wert wie "ff" wird nicht machen es zu join().
Ah, right. Behoben.
InformationsquelleAutor Bergi
Genauere und performant (siehe https://jsperf.com/byte-array-to-hex-string) alternative Verwendung von Array.reduce():
(Auch ohne "& 0xFF", weil meiner Meinung nach, wenn ein array übergeben wird, enthält Werte, die größer als 255 ist, sollte die Ausgabe Durcheinander, so dass die Benutzer können leichter erkennen, dass Ihre Eingabe falsch war.)
InformationsquelleAutor AndyO
Mit
map()
wird nicht funktionieren, wenn die Eingabe von einer Art, wieUint8Array
: das Ergebnismap()
ist auchUint8Array
die nicht halten kann die Ergebnisse von string-Konvertierung.InformationsquelleAutor grantpatterson
Müssen Sie pad der hex-Konvertierung mit der entsprechenden Anzahl führender Nullen.
InformationsquelleAutor void
Da dies der erste Google-Treffer für "js byte hex" und ich brauchte einige Zeit, um zu verstehen, die Funktion des Bergi, ich schrieb die Funktion und einige Kommentare Hinzugefügt, die es einfacher für mich zu verstehen:
const unsignedByte = byte & 0xff
-Teil, überprüfen Was bedeutet UND 0xFF tun?.Array.aus
ist nicht in jedem browser (z.B. nicht im IE11), überprüfen Sie Wie konvertiert ein JavaScript Typisierte Arrays in ein JavaScript-Array weitere InformationenDer OP vergaß hinzuzufügen, der führende
0
für zahlen, die angezeigt werden können, mit nur 4 bits.InformationsquelleAutor Putzi San