我创建了这个函数来解析缓冲区中的整数:
var makeInt = function(b1, b2, b3, b4) {
return ((b1 << 0) & 0x000000FF) +
((b2 << 8) & 0x0000FF00) +
((b3 << 16) & 0x00FF0000) +
((b4 << 24) & 0xFF000000);
}
从缓冲区中,我读取了这样的整数:
var buffer = new Buffer([0,0,15,47,0,0,0,64,0,0])
console.log(makeInt(buffer[3],buffer[2],buffer[1],buffer[0]))
=> 3887
官方的Buffer函数来自https://nodejs.org/api/buffer.html和我的makeInt
函数一样吗
我试过了https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert
但buf.readUIntLE(offset, byteLength[, noAssert])
返回:
buffer.readUIntLE(0, 3)
=> 983040
为什么不返回3887 != 983040
?
感谢
您使用了4个比特,但通过了3个。有两种存储数字的方法——小端序和大端序。您的代码似乎实现了big-endian。
var buffer = new Buffer([0,0,15,47,0,0,0,64,0,0]);
console.log(buffer.readUIntBE(0, 4));