CNode

不是8位对齐的Buffer数据可以怎么处理?

问答
Pp2227__legacy_56b1661926d02fc6626bb472发布于10 年前最后回复10 年前2 回复3739 浏览0 收藏
let buf = Buffer.alloc(4);
//buf的二进制分割情况是   0 11111111 00000000000000000000000 不是8位对齐的。

比如数据总共长32位,我想分别取第1位,第2-9位,剩下23位,可以怎么处理比较优雅而且效率高?

查看回复

回复 (2)

Z
zbinlin#1·10 年前

用位运算应该比较快:

let buf = Buffer.allocUnsafe(4);
let v = buf.readUInt32BE(buf);
let a = v >>> 31;
let b = v >>> 23 & 0xFF;
let c = v & (Math.pow(2, 24) - 1);
引用 zbinlin用位运算应该比较快:

@zbinlin 好的,概括一下,就是把想要的数据移到低位再与一下【相应位数的全1】

参与回复
登录后即可参与回复。登录