Hoje mostro como separar uma matriz de bytes em outras baseada em um conjunto de bytes[ex. inicializadores de protocolo].
[sections] [section title=”Separador de matriz de bytes baseado em inicializador”]

public static byte[][] Separate(byte[] source, byte[] separator)
{
var Parts = new List<byte[]>();
int Index = 0;
byte[] Part;
bool init = false;
int initv = 0;
for (int I = 0; I < source.Length; ++I)
{
if (Equals(source, separator, I))
{
if (!init)
{
init = true;
initv = I – Index;
}
else if (init || I == source.Length)
{
Part = new byte[I – initv];
Array.Copy(source, Index, Part, 0, Part.Length);
Parts.Add(Part);
Index = I + separator.Length;
initv = I;
I += separator.Length – 1;
}
}
}
if (init)
{
Part = new byte[source-initv.Length];
Array.Copy(source, initv, Part, 0, Part.Length);
Parts.Add(Part);
}
return Parts.ToArray();
}

private static bool Equals(byte[] source, IEnumerable<byte> separator, int index)
{
return !separator.Where((t, i) => index + i >= source.Length || source[index + i] != t).Any();
}

[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Separador de matriz de bytes baseado em inicializador
Tags:                     

Deixe uma resposta

%d blogueiros gostam disto: