位数组中的拆分字节数组

本文关键字:数组 字节 字节数 拆分 | 更新日期: 2023-09-27 18:30:27

我有一个长度为 64 的字节数组。 我有一个这个字节数组中的数据对应的顺序列表。 此列表告诉我每个值的大小(以位为单位)。 大多数值是 8 或 16 位,很容易解析出来。 但是,大约在列表的中间,我开始获得 12 位或 5 位的长度。 循环这些并拉出我需要的位的最佳方法是什么。

位数组中的拆分字节数组

以下代码应从存储为uint[]的数据缓冲区中提取 n 位。我还没有测试过它,所以需要注意讲师。

uint GetBits(uint[] data, ref uint pos, uint n) {
    uint a = pos/32;
    uint off = pos%32;
    uint mask = (1 << n) - 1;
    pos += n;
    return (data[a] << off)&mask | (data[a + 1] >> (32 - off))&mask;
}

请注意,它假定小端存储,因此未对齐的值从一个单词的高位流入下一个单词的低位。