繁体   English   中英

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

[英]How to add and remove individual bits from an ArrayBuffer in JavaScript?

我知道你不能真正操纵 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); } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM