【发布时间】:2015-08-16 03:15:09
【问题描述】:
是否可以只读取字符串的最后两个字节。例如,我从流套接字接收 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,因为我需要将其转换为十进制值,然后将其实现为等式。谢谢:)
【问题讨论】:
-
字符串有字符;流有字节;字符串可以编码为字节,但除非您首先定义编码,否则两者之间没有直接映射;目前尚不清楚您想在这里做什么 - 您可以 skip 字节(通过读取它们但不处理它们),但除非您至少缓冲,否则您无法获得“最后 n”字节n 个字节(大概在一个循环缓冲区中)并等到你到达流的末尾
-
顺便说一句:您的阅读代码不安全;您可以读取 1 个字节、0 个字节,以及不超过
MessageProt.Length字节的任何内容;您可能已经收到了一半的逻辑消息,而另一半仍在途中(拆分数据包、缓冲区等) - 基本上:如果您需要,这不是与套接字通信的方式稳健地工作 -
不幸的是,当我尝试在第二个读取流操作中读取时,某些字节会混淆或无法正确显示。我正在尝试一种不同的方法,如下所示: