我正在尝试使用来自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");
}
}运行时,这会产生一个恒定的"Good Block => Zero Block“流。因此,出于某种原因,BitStream将零输出到theCodedBlock数组中。它似乎可以很好地从代码中其他地方的内存数组中读取值,那么是我做错了什么呢,还是这是一个BitStream错误?
发布于 2015-02-26 05:26:59
刚刚发现问题所在:
BitStream库不能正确地支持向从中加载它的流的写入;它向其内部缓冲区写入,但不执行任何操作来将其写回流。您必须创建一个空的BitStream,对其进行写操作,然后将其转换回MemoryStream。
https://stackoverflow.com/questions/28703200
复制相似问题