2015-02-24 29 views
0

我试图从8位包装转换为7位包装使用比尔Koukoutsis从CodeProject.com仍然似乎是去源的比特流库对于C#中的这种事情。我使用的代码如下(fs为代码以外初始化的FILESTREAM):CodeProject C#bitstream class给出了零阵列

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将0输出到代码块数组中。它看起来工作正常从代码中的其他地方读取内存数组中的值,所以我做错了什么或者这是一个BitStream错误?

回答

0

就发现了问题:

BitStream库不能正确支持写入它从加载流;它将写入其内部缓冲区,但不会执行任何操作将其写回到流中。您必须创建一个空的BitStream,写入,然后将其转换回MemoryStream