用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
posted @ 2022-03-11 21:44  fkess  阅读(193)  评论(0)    收藏  举报