Buffer按位与操作不符合预期:0x81与0x80运算为何不满足条件?
问题原因与解决方案
问题出在你直接对Buffer实例执行按位与操作,而非读取Buffer中存储的单个字节数值。
new Buffer.from(...)返回的是Buffer对象,它是字节数组的包装类。直接将Buffer对象与0x80做按位与运算时,JavaScript会把Buffer对象强制转换为数值(转换结果并非你期望的0x81),导致条件判断失效。
修正后的代码
const text = 'FF8134' const buff = new Buffer.from(text.substring(2, 4), 'hex') console.log('buff in string: ' + buff.toString('hex')) // 取Buffer中第一个字节的数值再执行按位与操作 if ((buff[0] & 0x80) === 0x80) { console.log('B2b8 is set') } else { console.log('B2b8 is NOT set') }
执行结果
buff in string: 81 B2b8 is set
补充说明
- Buffer是类数组结构,通过下标
[index]可直接获取对应位置的字节数值(范围0-255) - 若处理多字节Buffer,需根据需求指定对应下标来获取目标字节
内容的提问来源于stack exchange,提问作者kzaiwo
相关产品推荐
相关产品推荐

