2016-05-27 2 views
0

У меня есть массив чисел, который я бы хотел записать в файл с помощью Node.JS.Как записать двоичный файл (не UTF-8) в файл

Если у меня есть номер: 256

Файл должен содержать двоичный код:

`00000001 00000000` 

И не:

`00000010 00000101 00000110` 

Причина Задавая этот вопрос, что я прочитал что формат двоичной строки для буферов устарел 1.

+0

Вы должны укажите свой код. Как вы создаете и записываете буфер, который создает нежелательный результат? –

ответ

1

Buffer класс может обрабатывать массивы чисел непосредственно:

// 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); 

Если вы имеете дело с большими числами (не байт), вам нужно использовать typed array.

Например, при использовании 16-битных значений без знака:

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

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

Любые мысли о написании и чтении двойного целого числа, такого как 256? Прямо сейчас его более значимые цифры отрубаются (это показывает 0) – Trajanson

+1

@ Траянсон Я обновил свой ответ – robertklep

0

Пожалуйста, обратите внимание на справках о буфере: https://nodejs.org/api/buffer.html

буфером поддержки чтения/записи двоичных чисел:

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])