【发布时间】:2015-11-27 14:12:08
【问题描述】:
我正在尝试通过“删除”重复字节来打包给定的字节数组,如下所示:
- 入口255 1 1 4 4 4 4 4 200 15 10
- 输出 1x255 2x1 5x4 1x200 1x15 1x10 => 255 1 1 5 4 200 15 10
如果一个字节重复超过 3 次,我用计数器替换它。
我首先制作了一个没有重复值的临时字节列表,并列出了出现次数。不过我的柜台有问题:
public static void compressBlock(List<byte> buffer)
{
byte marker = buffer.Last();
int counter = 1;
byte[] buffer_ar = new byte[buffer.Count];
buffer_ar = buffer.ToArray();
List<byte> temp = new List<byte>();
List<int> tmp = new List<int>();
int indeks = 0;
while (true)
{
if (buffer_ar[indeks] == buffer_ar[indeks + 1])
{
counter++;
if (buffer_ar[indeks] != buffer_ar[indeks + 1])
{
temp.Add(buffer_ar[indeks]);
tmp.Add(counter);
//counter = 1;
}
}
else
{
//counter = 1;
temp.Add(buffer_ar[indeks]);
tmp.Add(counter);
}
indeks++;
//counter = 1;
if (buffer_ar.Length -1 <= indeks) { break; }
}
作为我的输出:
字节列表:255 1 4 200 15 10
整数列表:1 2 6 6 6 6
我知道我必须在某个时候重置计数器,但是当我这样做作为 int 列表的输出时,我有:1 1 1 1 1 1。
有人能给我指出正确的方向吗?
【问题讨论】:
-
旁注:所以不同输入`255 1 1 4 4 4 4 4 200 15 10`和
255 1 1 5 4 200 15 10应该产生相同的输出255 1 1 5 4 200 15 10? -
255 1 1 5 4 200 15 10
-
假设
255 1 1 5 4 200 15 10是输入,那么输出是什么? -
在我的 byte[] temp 上它将是:255 1 5 4 200 15 10,在最终压缩块上它将是 255 1 1 5 4 200 15 10 因为添加计数器没有意义,因为它不会减少字节数
-
并且,请参阅:不同的输入,即
255 1 1 4 4 4 4 4 200 15 10和255 1 1 5 4 200 15 10将产生相同的输出255 1 1 5 4 200 15 10,那么怎么能你解码它回来了吗?5 4应该“按原样”解码5 4还是扩展为4 4 4 4 4?