位序列
将字节数组中的任意位序列转换为整数
要求
Node.js >= 20
JavaScript
给定一个 Array像包含字节(无符号8位整数)一样,提取底层位的任意序列并将其转换为无符号整数值。
用于使用较长字节序列中的位子序列来形成索引的情况,例如在 哈希数组映射trie 其中树结构的每个级别上的索引是由键的散列的增量块组成的。
例子
import bitSequence from 'bit-sequence'
import assert from 'node:assert'
const bytes = new Uint8Array([ 0b00010101, 0b10101000, 0b00000000, 0b00000000 ])
// extract bits from here ^ to here ^
const int = bitSequence(bytes, 7, 11)
assert.strictEqual(int, 0b11010100000) // or `1696`
API
bitSequence(bytes, start, length)
bytes是一个Array像包含字节一样。假设它可以通过数组索引操作符访问,并且它将返回8位整数(< 255). 一个Uint8Array或node . jsBuffer就像标准一样,也属于这一类Array然而,8位假设并没有被强制执行Array满是较大的整数将产生未定义的结果。start是一个整数 位 索引开始提取(不是 字节 索引)。length要提取的位数是多少bytes数组中。
返回一个 无符号整数 位序列的版本。最高有效位不被解释为2的恭维表示。你应该只得到正数 >= 0.
根据上面的示例,假设我们提取的字节中最低有效位在右侧,因此我们按照二进制字面值表示的顺序进行提取。
JavaScript的疯狂数字允许我们提取潜在的非常大的位序列,但通常的警告适用于32位及以上 Number.MAX_SAFE_INTEGER.
去
github.com/rvagg/bit-sequence/go
API
出口 BitSequence(bytes []byte, bitStart uint32, bitLength uint32) (uint32, error) 地点:
bytes是一个简单的字节数组的任意长度bitStart是一个 位 索引开始提取(不是 字节 索引)。bitLength要提取的位数是多少bytes数组中。该值只能为的最大值32,较高的值将向下调整。
返回位序列的无符号整数版本。最高有效位不被解释为2的恭维表示。
返回一个错误 bitLength 超过32或请求的序列超出字节边界。
许可与版权
版权所有2019 Rod Vagg
根据Apache许可证2.0版(“许可证”)进行许可;除非遵守许可,否则您不得使用此文件。您可以从以下网址获得许可证的副本 http://www.apache.org/licenses/LICENSE-2.0
除非适用法律另有规定或双方书面约定,否则根据本许可证分发的软件按“原样”提供,不附带任何明示或暗示的担保或条件。有关许可证中规定的具体语言、权限及限制,请参阅该许可证。