2015-06-02 40 views
0

是否可以从字符串中只读取最后两个字节。例如,我从一个流套接字接收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; 
      } 

注:我只需要34我需要将其转换为十进制值,比落实到一个等式。谢谢:)

+0

字符串有字符;流有字节;可以将字符串*编码为字节,但除非您先定义编码,否则两者之间不存在直接映射;目前还不清楚你想在这里做什么 - 你可以跳过*字节(通过读取它们但不处理它们),但是你不能得到“最后n”字节,除非你至少缓冲了n个字节(大概是一个循环缓冲区),并等到你到达流的末尾 –

+1

btw:你的阅读代码不安全;您可以读取1个字节,0个字节,最多达到'MessageProt.Length'字节;你可能已经收到了逻辑消息的一半,而另一半仍然在途中(分组数据包,缓冲区等) - 基本上:这是**不是**如果你想让它工作稳健 –

+0

不幸的是,当我尝试在第二个读流操作中读取时,有些字节会混淆或者无法正确显示。我正在尝试一种可以在下面看到的不同方法: – Albzoq

回答

1

你不能只是从套接字“不读”字节。

所以,阅读整个字符串并选择要用作Extract only right most n letters from a string解释字符:

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

但作为Marc points out in the comments,你的阅读代码将无法正常工作。现在它是巧合,但它可能会失败。请参阅What does Filestream.Read return value mean? How to read data in chunks and process it?,致电Read(),直到您阅读您期望的字节数。