我有一个看起来像这样的字节数组:

byte[] exampleArray = new byte[]
                      { 0x01, 0x13, 0x10, 0xe2, 0xb9, 0x13, 0x10, 0x75, 0x3a, 0x13 };

我的最终目标是在看到序列{ 0x13, 0x10 }时随时将此数组拆分为子数组。所以我对示例数组的期望结果是:
{ 0x01 }
{ 0xe2, 0xb9 }
{ 0x75, 0x3a, 0x13 }

理想情况下,我还需要知道最终数组{ 0x75, 0x3a, 0x13 }并不以搜索序列结尾,以便作为特殊情况我可以使用它。

对最佳方法有任何想法吗?

最佳答案

List<byte[]> Split(byte[] bArray)
        {
            List<byte[]> result = new List<byte[]>();
            List<byte> tmp = new List<byte>();
            int i, n = bArray.Length;
            for (i = 0; i < n; i++)
            {
                if (bArray[i] == 0x13 && (i + 1 < n && bArray[i + 1] == 0x10))
                {
                    result.Add(tmp.ToArray());
                    tmp.Clear();
                    i++;
                }
                else
                    tmp.Add(bArray[i]);
            }
            if (tmp.Count > 0)
                result.Add(tmp.ToArray());
            return result;
        }

最后一个数组不能以序列结尾,任何分割的部分都不能包含分隔符。
只能发生字节0x13,因此,如果这对您来说很重要,则可以检查最后一个子数组的最后一个字节。

10-04 22:06