我有一个长度为64的字节数组。我有一个顺序列表,列出了这个字节数组中的数据对应的内容。这个列表告诉我每个值的位大小。大多数值是8或16位,很容易解析。但是,在列表的中间位置,我开始获得12位或5位的长度。循环使用这些并拉出我需要的位的最佳方法是什么。
答案 0 :(得分:1)
以下代码应从存储为uint[]
的数据缓冲区中提取 n 位。我没有测试过,所以告诫lector 。
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;
}
请注意,它假定为little-endian存储,因此未对齐的值从一个字的高位流入下一个字的低位。