我创建了这个函数来解析Buffer中的Integer:
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
来自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
?
感谢
答案 0 :(得分:2)
你使用4个咬,但是通过3.有两种方法可以存储数字 - little-endian和big-endian。看来你的代码实现了大端。
var buffer = new Buffer([0,0,15,47,0,0,0,64,0,0]);
console.log(buffer.readUIntBE(0, 4));