用nodejs的Buffer进行位域操作
//在字符串前补全0,共n位
function pad(str, n ){
let str1 = str;
let len = str.length;
while(len<n){
str = '0'+str;
len = len+1;
}
return str;
}
let a =1 , b = 743 , c=506,d =1007; //待填入的数
let str = //将abcd变成二进制字符串
pad(a.toString(2),2)+
pad(b.toString(2),11)+
pad(c.toString(2),9)+
pad(d.toString(2),10)
;
console.log( [ //输出[ '01', '01011100111', '111111010', '1111101111' ]
pad(a.toString(2),2),
pad(b.toString(2),11),
pad(c.toString(2),9),
pad(d.toString(2),10)])
;
console.log(str);
let data = [ //取整字节变为int,然后变为16进制 字串
parseInt(str.slice(0,8),2).toString(16),
parseInt(str.slice(8,16),2).toString(16),
parseInt(str.slice(16,24),2).toString(16),
parseInt(str.slice(24,32),2).toString(16),
];
let da = [
parseInt(str.slice(0,8),2),
parseInt(str.slice(8,16),2),
parseInt(str.slice(16,24),2),
parseInt(str.slice(24,32),2),
];
let buf = Buffer.from(da); //变为buffer
console.log('data',data,buf); //data [ '57', '3f', 'eb', 'ef' ] <Buffer 57 3f eb ef>
//buffer变为二进制字串 与前述一致
let aa = pad(buf.slice(0,2).readUint16BE(0).toString(2),16);
let bb = pad(buf.slice(2,4).readUint16BE(0).toString(2),16);
console.log(aa,bb); //0101011100111111 1110101111101111