我有一个数字数组,我想用Node.JS写入一个文件。如何将二进制文件(不是UTF-8)写入文件
如果我有一个数字:256
该文件应包含二进制:
`00000001 00000000`
而不是:
`00000010 00000101 00000110`
之所以问这个问题是我已经阅读缓冲区的二进制字符串格式已被弃用1。
我有一个数字数组,我想用Node.JS写入一个文件。如何将二进制文件(不是UTF-8)写入文件
如果我有一个数字:256
该文件应包含二进制:
`00000001 00000000`
而不是:
`00000010 00000101 00000110`
之所以问这个问题是我已经阅读缓冲区的二进制字符串格式已被弃用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);
任何关于写入和读取256长度的双精度整数的想法?现在,其更重要的数字被切断(它显示为0) – Trajanson
@Trajanson我更新了我的答案 – robertklep
请看看缓冲区的机制的文档: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])
你应该包括你的代码。你如何构建和编写产生不良结果的缓冲区? –