如何将二进制(非 UTF-8)写入文件

How to Write Binary (not UTF-8) to File

我有一个数字数组,我想使用 Node.JS 将其写入文件。

如果我有号码:256

文件应包含二进制文件:

`00000001  00000000`

而不是:

`00000010  00000101  00000110`

问这个问题的原因是我读到缓冲区的二进制字符串格式正在被弃用1

Bufferclass可以直接处理数字数组:

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

请查看 Buffer 的文档:https://nodejs.org/api/buffer.html

缓冲区支持read/write二进制数:

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