2015-02-24 35 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