C#でバイトを読み取る方法

私は自分の受信バッファを処理しようとしており、各送信時に125バイトのデータをすべて取得していることを確認しています。私はバイト配列を作成しました。 125バイトのデータが受信されていることをどのように知ることができますか?私はバイト数を表示しようとしましたが、別の数を表示し、受信したバイト数を取得するのが正しいコーディングであるかどうかはわかりません。

ここに私のコードです:

void datareceived(object sender, SerialDataReceivedEventArgs e)
{
    myDelegate d = new myDelegate(update);
    listBox1.Invoke(d, new object[] { });
}


public void update()
{
    Console.WriteLine("Number of bytes:" + serialPort.BytesToRead);//it shows 155

    while (serialPort.BytesToRead > 0)
        bBuffer.Add((byte)serialPort.ReadByte());         
    ProcessBuffer(bBuffer);
}

private void ProcessBuffer(List bBuffer)
{
   //Create a byte array buffer to hold the incoming data
    byte[] buffer = bBuffer.ToArray();

   //Show the user the incoming data//Display mode
    for (int i = 0; i < buffer.Length; i++)
    {
        listBox1.Items.Add("SP: " + (bBuffer[43].ToString()) + "  " + " HR: " + (bBuffer[103].ToString()) + " Time: ");              
    }
}
4
私は自分の答えを明確にしようとしましたが(最初は質問に間違っていました)、 BytesToRead はローカルの受信バッファを参照するだけです。それはあなたが何が入っているかについて何も教えてくれません。通常、 BytesToRead のようなものの主な用途は、既に存在するまたはブロック(sync)しているデータを処理するかどうかを決める場合、 BeginRead (非同期)
追加された 著者 Marc Gravell,

1 答え

現時点では、ローカル受信バッファ BytesToRead )たとえそれが待っていても - つまり

byte[] buffer = new byte[125]
int offset = 0, toRead = 125;

...

int read;
while(toRead > 0 && (read = serialPort.Read(buffer, offset, toRead)) > 0) {
    offset += read;
    toRead -= read;
}
if(toRead > 0) throw new EndOfStreamException();
// you now have all the data you requested
7
追加された
あなたの返事のためにありがとうmarc。私は新しいバッファ[125]配列を作成しようとしているときにエラーmsgを受け取りました。特定の名前空間が必要ですか?
追加された 著者 fb69,
@ fb69ドン!いいえ、私はより良い指が必要です。新しいバイト[125] を読む必要があります
追加された 著者 Marc Gravell,