2016-03-20 13 views
0

Ich habe einen Puffer mit der Größe n (davon ausgegangen, dass es sehr groß ist und keinen Indexüberlauf haben). Ich möchte die ersten 16 Bytes des Puffers hashen und das Hash-Ergebnis als nächsten Ort im Puffer verwenden, um die nächsten 16 Bytes zu hashen und so weiter und so fort. Dies ist meine erste Codezeile:Javascript konvertieren Puffer zu einer Nummer

var newLocation = crypto.createHash("sha256").update(buf.slice(0, 16)).digest()

newLocation ist eigentlich ein Puffertyp. Ich möchte wissen, wie kann ich es in eine Indexnummer konvertieren, die ich zu buf.slice(index, 16) springen kann?

Antwort

0

Ich nehme an, Sie wollen 16 BIT LE Integer. Versuchen newLocation = newLocation.readInt16LE(0);

Oder einfach, newLocation = crypto.createHash("sha256").update(buf.slice(0, 16)).digest().readInt16LE(0);

Wenn Sie wollen, verwenden Sie readInt16BE statt.


Wenn Sie wirklich 16 Bytes meinen, weiß ich nicht, wie man einen 16 Bytes Puffer in eine ganze Zahl umwandelt.

+0

Ist es möglich, dass ich den Hash-Wert einer N-Bit-Nummer zuordnen kann, die N variieren kann? Zum Beispiel, wenn ich einen 256-Bit-Index möchte, kann ich direkt von newLocation konvertieren? Vielen Dank. – Luke

+0

16 Bytes ist die Länge der Daten als Eingabe für die Hash-Funktion. Die Länge des Hash-Wertes beträgt 256 Bit, was 32 Bytes entspricht. Ich denke, Verwendung Digest ('binär') wird eine 256-Bit-Binärzeichenfolge ergeben. Ist es jedoch möglich, dass ich den Hash-Wert einer N-Bit-Nummer zuordnen kann, die N variieren kann? Wenn ich zum Beispiel einen 128-Bit- oder 512-Bit-Index haben möchte, kann ich direkt von newLocation konvertieren? Vielen Dank. – Luke

+0

@LuqinWang Sie können, aber eine N-Bit-Nummer kann sehr groß sein, wenn N größer als 16 ist, geschweige denn 256. In Anbetracht der Tatsache, dass Sie diese Zahl als Index eines Arrays verwenden werden, ist dieses Array sehr gut möglich größer als Ihre Speicherkapazität. Ich weiß wirklich nicht, warum du es machen willst. – Quarter2Twelve