位数组中的拆分字节数组
本文关键字:数组 字节 字节数 拆分 | 更新日期: 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;
}
请注意,它假定小端存储,因此未对齐的值从一个单词的高位流入下一个单词的低位。