2016-05-27 7 views
0

Ich habe ein Array von Zahlen, die ich mit Node.JS in eine Datei schreiben möchte.So schreiben Sie Binär (nicht UTF-8) in Datei

Wenn ich eine Nummer haben:

`00000001 00000000` 

Und nicht: 256

Die Datei mit dem binären enthalten sollte

`00000010 00000101 00000110` 

Der Grund für diese Frage ist, dass ich gelesen habe dass das binäre Zeichenfolgenformat für Puffer nicht mehr unterstützt wird 1.

+0

Sie sollten Gib deinen Code ein. Wie erstellen und schreiben Sie den Puffer, der das unerwünschte Ergebnis erzeugt? –

Antwort

1

Die Buffer Klasse Arrays von Zahlen direkt verarbeiten kann:

// Old style 
var buffer = new Buffer([ 150 ]); 

// New style 
var buffer = Buffer.from([ 150 ]); 

// Write the buffer to a file. 
// Using `fs.writeFileSync()` just as an example here. 
require('fs').writeFileSync('output.bin', buffer); 

Wenn Sie mit einer größeren Anzahl zu tun hat (nicht Bytes), benötigen Sie einen typed array verwenden.

Zum Beispiel 16-Bit-Werte ohne Vorzeichen mit:

var array = [ 5000, 4000 ]; 
var u16array = Uint16Array.from(array); 
var buffer = new Buffer(u16array.buffer); 

require('fs').writeFileSync('output.bin', buffer); 
+0

Irgendwelche Gedanken zum Schreiben und Lesen einer doppelt langen Ganzzahl wie 256? Gerade jetzt werden seine wichtigeren Ziffern abgeschnitten (es zeigt 0) – Trajanson

+1

@Trajanson Ich aktualisierte meine Antwort – robertklep

0

Bitte nehmen Sie sich einen Blick auf Buffer der Dokumention: https://nodejs.org/api/buffer.html

Buffer Unterstützung Lese-/Schreib-Binärzahlen:

buf.readDoubleBE(offset[, noAssert]) 
buf.readDoubleLE(offset[, noAssert]) 
buf.readFloatBE(offset[, noAssert]) 
buf.readFloatLE(offset[, noAssert]) 
buf.readInt8(offset[, noAssert]) 
buf.readInt16BE(offset[, noAssert]) 
buf.readInt16LE(offset[, noAssert]) 
buf.readInt32BE(offset[, noAssert]) 
buf.readInt32LE(offset[, noAssert]) 
buf.readIntBE(offset, byteLength[, noAssert]) 
buf.readIntLE(offset, byteLength[, noAssert]) 
buf.readUInt8(offset[, noAssert]) 
buf.readUInt16BE(offset[, noAssert]) 
buf.readUInt16LE(offset[, noAssert]) 
buf.readUInt32BE(offset[, noAssert]) 
buf.readUInt32LE(offset[, noAssert]) 
buf.readUIntBE(offset, byteLength[, noAssert]) 
buf.readUIntLE(offset, byteLength[, noAssert])