我有一个看起来像这样的字节数组:
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,因此,如果这对您来说很重要,则可以检查最后一个子数组的最后一个字节。