在位数组中拆分字节数组

时间:2012-04-08 04:01:06

标签: c# bytearray bit-manipulation

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

1 个答案:

答案 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存储,因此未对齐的值从一个字的高位流入下一个字的低位。