如何在 JavaScript 中添加和删除 ArrayBuffer 中的单个位?



我知道你不能真正操作ArrayBuffer,但也许使用DataView或类似的东西,你可以解决如何一次构建一位二进制字符串的问题。我的目标是一次构建一位编码二进制字符串,如何在 JavaScript 中做到这一点?我所看到的一切都只用字节Uint8Array,但我想要位。

任何性质的错误检查都留给读者作为练习。

"use strict";
window.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
function DOMContentLoaded(evt)
{
let result = new bitBuffer(8);

let _255 = [1,1,1,1,1,1,1,1];
let _128 = [1,0,0,0,0,0,0,0];
let _001 = [0,0,0,0,0,0,0,1];
// make 3 entries
for (var i=0; i<8; i++)
result.pushBit(_255[i]);

for (var i=0; i<8; i++)
result.pushBit(_128[i]);

for (var i=0; i<8; i++)
result.pushBit(_001[i]);

console.log( Array.from( result.getValue() ) );
}
class bitBuffer
{
constructor(numBytes)
{
this.buffer = new ArrayBuffer(numBytes);
this.view = new DataView( this.buffer );
this.numBitsDone = 0;
this.numBytesDone = 0;
}
pushBit(bitIsSet=false)
{
let curByte = this.view.getUint8( this.numBytesDone );
curByte <<= 1;
if (bitIsSet)
curByte |= 0x01;
this.view.setUint8( this.numBytesDone, curByte );

this.numBitsDone++;
if (this.numBitsDone == 8)
{
this.numBitsDone = 0;
this.numBytesDone++;
}
}
getValue()
{
return new Uint8Array(this.view.buffer);
}
}

最新更新