我在将文件中的数据作为缓冲区然后将其转换为长示例代码时遇到问题
var fs = require('fs');
fs.open('24.mkt', 'r', function(status, fd) {
if (status) {
console.log(status.message);
return;
}
var buffer = new Buffer(4);
fs.read(fd, buffer, 0, 4, 0, function(err, num) {
console.log(buffer.values());
});
});
文件链接 - > https://archive.org/download/kamo_24/24.mkt
前4个字节包含4个字节的长整数时间戳
答案 0 :(得分:1)
您可以使用node.js的Buffer.readInt32BE功能。它从给定的顺序(Big或Little endian)读取4个字节到变量,从offset参数开始:
// Unix timestamp now: 1492079016
var buffer = Buffer.from([0x58, 0xEF, 0x51, 0xA8]);
var timestamp = buffer.readInt32BE(0);
process.stdout.write(timestamp.toString());
答案 1 :(得分:0)
您可能希望使用readUInt32BE
and/or readUInt32LE
(buffer
)将缓冲区值转换为数字。
你也可以尝试使用node-bigint
或node-bignum
将缓冲区中的值转换为数值(对于4字节的情况,它可能有点过分但是如果你需要处理更大的数字,它可能会适合需要),都允许以类似的形式从缓冲区创建(只要知道选项差异):
bignum.fromBuffer(buf, opts)
// or
bigint.fromBuffer(buf, opts)