繁体   English   中英

删除字节数组中多余零的最佳方法

[英]Best way to remove extra zeroes in byte array

我正在制作一个序列化代码,我正在尝试使字节 output 尽可能小。

我的方法是像这样打包零字节:

ex: D3 00 00 00 00 00 00 00 00 00 00 28 85 (12 bytes)
turns into 09(zero array length) 01 (offset) D3 28 85 (5 bytes)

我的问题是:有什么有效的方法可以做到这一点? 我使用一个List来存储和连接字节arrays,并且数据有一个“Header”来标识字节数组是什么类型的数据。 就卡在这了。

建议?

编辑:我必须使用代码的一种方法是:

bool start = false;
byte offsetStart = 0; 
byte offsetEnd = 0;
for(int i = 0; i < array.Length; i++)
{
    if(array[i] == 0 && !start)
    {
         offsetstart == (byte)i;
         start = true;
    } 
    else if (array[i] != 0 && start)
    {
         offsetend == (byte)i;
         start = false;
    }

    if(offsetEnd - offsetStart <= //Some length ) return array;
    else 
    {
        byte arrayLength = offsetEnd - offsetStart;
        return arrayLength + offsetStart + 
        Array.Take(offsetStart).Skip(ArrayLength).Take(array.Length - offsetEnd);

    }
}

对于一个简单的协议,您应该使用 go。 创建类似 header 的东西。 例如。 以一个字节开头,该字节指示您是从 Zero's (0)还是 NonZero's (1)开始。 零会被压缩,非零不会。 所以第一个字节将是零或一。 第二个字节包含计数。 如果它是零,什么都不写,如果它是非零的,值将在它后面。

例子:

[0][10][1][10]1234567891[0][10]
[0][9][1][12]123456789123[0][9]

所以解压的时候:

[0][10] means, add 10 zero's, 
[1][10]1234567891 means, add 10 non-zero's, followed by the values
[0][9]  means, add 9 zero's, 
[1][12]123456789123 means,add 12 non-zero's, followed by the values

这样,零就不会“保存”。 它很容易压缩和解压缩。

如果您在编写代码时遇到困难,我会添加一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM