Ich hab grad ein kleines Hängerchen, vllt. kann mir jemand mit folgendem auf die Sprünge helfen
Ich bekomme ein UDP-Paket, welches ich in ein Byte-Array einlese - so weit so gut.
Das Byte-Array kann ich problemlos mit BitConverter.ToString bzw. mit Encoding.UTF8.GetString ausgeben.
Mir geht es allerdings um die Aufteilung ... Folgendes Byte Array ist nur ein Beispiel.
FF-FF-FF-FF-3D-3D-00-53-68-69-6E-6F-00-00-00-00-00-C0-C8-8F-46-00-3D-47-4F-3D-4D-61-64-5F-44-6F-67-00-00-00-00-00-3C-BA-0A-46-00-4E-61-73-68-20-42-72-69-64-67-65-73 (...)
Die grün markierten Bereiche sind von der Länge her natürlich nicht fixiert, sonst könnte ich mit Take() und Skip() arbeiten.
Gleichzeitig muss ich, je nach Richtung des Durchlaufs, jeweils die 5 0x00 Bytes skippen.
Egal was ich versucht habe - es hat nie wirklich geklappt. Mir graut es vor einer profesorischen RegEx Lösung aus dem Encoding.UTF8.GetString ...
Folgendes habe ich u.a. versucht:
- For-Schleife für jedes Byte
- Prüfung wenn aktuelles Byte = 0x00 ob index -/+ 1, 2, 3 (etc.) auch 0x00 ist -> skip
- Ansonsten in List<byte> gesichert, nach nächstem 0x00 Abschnitt Liste geleert und Inhalt in string-Array gesichert
Hat jemand Erfahrung damit wie man das möglichst effektiv umsetzen kann?
mfg,
Max
Hab nun ne feine Lösung entdeckt ...
mfg,
Max
Ich bekomme ein UDP-Paket, welches ich in ein Byte-Array einlese - so weit so gut.
Das Byte-Array kann ich problemlos mit BitConverter.ToString bzw. mit Encoding.UTF8.GetString ausgeben.
Mir geht es allerdings um die Aufteilung ... Folgendes Byte Array ist nur ein Beispiel.
FF-FF-FF-FF-3D-3D-00-53-68-69-6E-6F-00-00-00-00-00-C0-C8-8F-46-00-3D-47-4F-3D-4D-61-64-5F-44-6F-67-00-00-00-00-00-3C-BA-0A-46-00-4E-61-73-68-20-42-72-69-64-67-65-73 (...)
Die grün markierten Bereiche sind von der Länge her natürlich nicht fixiert, sonst könnte ich mit Take() und Skip() arbeiten.
Gleichzeitig muss ich, je nach Richtung des Durchlaufs, jeweils die 5 0x00 Bytes skippen.
Egal was ich versucht habe - es hat nie wirklich geklappt. Mir graut es vor einer profesorischen RegEx Lösung aus dem Encoding.UTF8.GetString ...
Folgendes habe ich u.a. versucht:
- For-Schleife für jedes Byte
- Prüfung wenn aktuelles Byte = 0x00 ob index -/+ 1, 2, 3 (etc.) auch 0x00 ist -> skip
- Ansonsten in List<byte> gesichert, nach nächstem 0x00 Abschnitt Liste geleert und Inhalt in string-Array gesichert
Hat jemand Erfahrung damit wie man das möglichst effektiv umsetzen kann?
mfg,
Max
Ergänzung ()
Hab nun ne feine Lösung entdeckt ...
Code:
public byte[][] Separate(byte[] source, byte[] separator)
{
var Parts = new List<byte[]>();
var Index = 0;
byte[] Part;
for (var I = 0; I < source.Length; ++I)
{
if (Equals(source, separator, I))
{
Part = new byte[I - Index];
Array.Copy(source, Index, Part, 0, Part.Length);
Parts.Add(Part);
Index = I + separator.Length;
I += separator.Length - 1;
}
}
Part = new byte[source.Length - Index];
Array.Copy(source, Index, Part, 0, Part.Length);
Parts.Add(Part);
return Parts.ToArray();
}
bool Equals(byte[] source, byte[] separator, int index)
{
for (int i = 0; i < separator.Length; ++i)
if (index + i >= source.Length || source[index + i] != separator[i])
return false;
return true;
}
mfg,
Max
Zuletzt bearbeitet: