从缓冲区解析整数

时间:2016-07-22 09:14:51

标签: node.js integer buffer

我创建了这个函数来解析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

感谢

1 个答案:

答案 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));