分析缓冲区中的整数



我创建了这个函数来解析缓冲区中的整数:

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

相关内容

  • 没有找到相关文章

最新更新