0

我正在尝试使用来自 CodeProject.com 的 Bill Koukoutsis 的 BitStream 库将一大块数据从 8 位打包转换为 7 位打包,这似乎仍然是 C# 中此类事情的首选来源。我正在使用的代码如下(fs 是在代码之外初始化的文件流):

for (int block = 0; block < count; block++)
{
    var theBlock = fetcher(block);
    if (theBlock.Any(x => (x != 0)))
    {
        Console.Write("Good Block =>");
    }
    else
    {
        Console.Write("Zero block =>");
    }
    var sevenBitSize = theBlock.Length - (theBlock.Length/8);
    var theCodedBlock = new byte[sevenBitSize];
    var ms = new MemoryStream(theCodedBlock);
    BitStream bms = ms;
    using (bms)
    {
        foreach (byte t in theBlock)
        {
            bms.Write(t, 0, 7);
        }
        bms.WriteTo(fs);
    }
    if (theCodedBlock.Any(x => (x != 0)))
    {
         Console.Write("Good Block\n");
    }
    else
    {
         Console.Write("Zero block\n");
    }
}

运行时,这会产生一个恒定的“好块 => 零块”流。因此,由于某种原因,BitStream 将零输出到 theCodedBlock 数组中。从代码中其他地方的内存数组读取值似乎可以正常工作,所以我做错了什么还是这是一个 BitStream 错误?

4

1 回答 1

0

刚刚发现问题:

BitStream库不正确支持写入从中加载它的流;它写入其内部缓冲区,但不做任何事情将其写回流。您必须创建一个空的BitStream,写入它,然后将其转换回MemoryStream.

于 2015-02-25T21:26:59.383 回答