シリアルデバイスからストリーミングされたデータがあります。私はデータパケットが常にF4
で始まる16進文字列としてこれを持っています。データストリームをパケットに分割する方法は?
while (_serialPort.BytesToRead > 0)
{
var chunk = new byte[_serialPort.BytesToRead];
_serialPort.Read(chunk, 0, chunk.Length);
_text += BitConverter.ToString(chunk);
}
をそして、それはBytesToRead
あるとして、チャンク変数は常に異なっている:
私が使用しています。パケットが入ってくると、パケットをどのように分割すべきですか?
私は考えています:
文字列がF4
が含まれている場合は、 バッファにデータをプッシュを開始します。 次のF4
で、既存のバッファを停止して処理し、再度入力を開始します。
これは実行可能なアプローチですか? これにはどのような方法が最適ですか?
*「16進文字列」*とはどういう意味ですか?この 'F4'は0xF4のバイト値か二つのASCII文字「F4」か???メッセージのデータ部分にこの開始バイト/シーケンスも含めることができる場合、この1つのテストのみに依存することは、メッセージフレームを誤認する傾向があります。少なくともチェックサム(またはより良いCRC32)や終了バイト/シーケンスの検出など、何らかのメッセージ完全性検証でメッセージの整合性を検証する必要もあります。いくつかの基本的な概念については、http://stackoverflow.com/questions/16177947/identification-of-packets-in-a-byte-stream/16180135#16180135を参照してください。 – sawdust