Ich habe Daten von einem seriellen Gerät streamen. Ich habe dies als Hex-String, wobei die Datenpakete immer mit F4
beginnen.Wie teilt man einen Datenstrom in Pakete auf?
ich bin mit:
while (_serialPort.BytesToRead > 0)
{
var chunk = new byte[_serialPort.BytesToRead];
_serialPort.Read(chunk, 0, chunk.Length);
_text += BitConverter.ToString(chunk);
}
Und wie es BytesToRead
ist, das Chunk-Variable ist immer anders. Wie sollte ich die Pakete verteilen, wenn sie eintreffen?
Ich denke:
Wenn Zeichenfolge F4
enthält, schieben Daten in den Puffer starten. Bei nächsten F4
, stoppen, bestehenden Puffer verarbeiten und neu beginnen zu füllen.
Ist dies ein praktikabler Ansatz? Was ist der beste Weg, um dies zu erreichen?
Was meinen Sie mit * "hex string" *? Ist das 'F4' ein Byte-Wert von 0xF4 oder zwei ASCII-Zeichen" F4 "oder ??? Wenn der Datenabschnitt der Nachricht auch dieses Startbyte/diese Startsequenz enthalten kann, besteht die Gefahr, dass nur auf diesen einen Test vertrauend, Nachrichtenrahmen falsch identifiziert werden. Zumindest müssen Sie auch die Nachrichtenausrichtung mit einer Art der Nachrichtenintegritätsprüfung verifizieren, beispielsweise einer Prüfsumme (oder besser CRC32) und/oder der Erkennung eines Endbytes/einer Endsequenz. Siehe http://stackoverflow.com/questions/16177947/identification-of-packets-in-a-byte-stream/16180135#16180135 für einige grundlegende Konzepte. – sawdust