2015-12-16 6 views
8

ich ein Byte-Array der Form haben [4,-101,122,-41,-30,23,-28,3,..], die ich in Form umwandeln möchten 6d69f597b217fa333246c2c8 Ich verwende unten FunktionByte-Array Hex String-Konvertierung in Javascript

function toHexString(bytes) { 
    return bytes.map(function(byte) { 
    return (byte & 0xFF).toString(16) 
    }).join('') 
} 

, die mir gibt eine Reihe von die gleiche Form, aber ich vermute, dass es keine effiziente Konvertierung ist, weil die Hex-Zeichenfolge ist etwas kürzer als erwartet. Ich denke, das Übersetzen sollte "0a10a6dc" bekommen. Sagen Sie mir bitte, wenn ich falsch oder ist dies eine richtige Umwandlung aber vielleicht bin ich nicht die richtige Byte-Array mit

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 Umwandlung 4812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ceaf4382fcfd6f5f8a08bb261979c2d49fb771601770f2c267985af2754e1f8cf9

+0

Entschuldigung, ich habe den Code aktualisiert. Ich änderte die Variablen vor dem Posten, aber jetzt benutze ich den ursprünglichen Code – Actung

Antwort

24

Sie vermissen die Polsterung in die Hex-Konvertierung. Sie werden

function toHexString(byteArray) { 
    return Array.from(byteArray, function(byte) { 
    return ('0' + (byte & 0xFF).toString(16)).slice(-2); 
    }).join('') 
} 

so dass jedes Byte transformiert, um genau zwei hexadezimalen Ziffern verwenden möchten. Ihre erwartete Ausgabe wäre 04812d7e3a9829e5d51bdd64ceb35df060699bc1309731bd6e6f1a5443a7f9ce0af4382fcfd6f5f8a08bb2619709c2d49fb771601770f2c267985af2754e1f8cf9

+0

Danke @Bergi seine Arbeit :) – Actung

+0

Dies funktioniert nicht, wenn ByteArray ist ein typisiertes Array, das keine String-Werte halten kann: wenn Sie in einem Uint8Array übergeben, Das Ergebnis von map wird auch ein Uint8Array sein, so dass ein Wert wie "ff" es nicht zu Join() macht. – grantpatterson

+0

@grantpatterson Ah, richtig. Fest. – Bergi

1

Sie müssen die Hex-Konvertierung mit der entsprechenden Anzahl von führenden Nullen auffüllen.

1

map() Verwendung wird nicht funktionieren, wenn die Eingabe eines Typs, wie Uint8Array ist: das Ergebnis map() ist auch Uint8Array, die nicht die Ergebnisse der String-Konvertierung halten kann.

function toHexString(byteArray) { 
    var s = '0x'; 
    byteArray.forEach(function(byte) { 
    s += ('0' + (byte & 0xFF).toString(16)).slice(-2); 
    }); 
    return s; 
}