0

文字列から最後の 2 バイトだけを読み取ることは可能ですか? たとえば、ストリーム ソケットから 41 0C 34 を受け取りましたが、必要なのは 34 だけです。これを行うにはどうすればよいでしょうか。これが私のコードです:

   public string ReadSensor(ISensor sensor)
    {

        if (ConnectedPort == null)
            return null;
        if (client.Connected)
        {

            string PIDhex = (sensor.GetValue(this)).ToString("x2"); ;

           string PID = Convert.ToString("01"+PIDhex+"\r");

           byte[] byteAir = System.Text.Encoding.ASCII.GetBytes(Convert.ToString(PID));

           stream.Write(byteAir, 0, byteAir.Length);

           byte[] MessageProt = new byte[8];
           stream.Read(MessageProt,0,MessageProt.Length);
           var str = System.Text.Encoding.ASCII.GetString(MessageProt);

           string output = Convert.ToString(str);
           return output;
           }

注: 10 進数値に変換する必要があり、それを数式に実装する必要があるため、必要なのは 34 だけです。ありがとう :)

4

1 に答える 1

1

ソケットからバイトを「読み取らない」ことはできません。

そのため、文字列全体を読み取り、必要な文字を選択します (文字列から右端の n 文字のみを抽出する で説明されています) 。

string lastTwo = input.Substring(input.Length - 2);

しかし、Marc がコメントで指摘しているように、読み取りコードは正しく機能しません。偶然ですが、現在は機能していますが、惨めに失敗する可能性があります。Filestream.Read の戻り値の意味を参照してください。データをチャンクで読み取って処理する方法は? Read()期待するバイト数を読み取るまで呼び出します。

于 2015-06-02T11:04:11.590 に答える