можно читать только последние два байта из строки. Например, я получаю 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, как мне нужно, чтобы преобразовать его в десятичное значение и чем реализовать его в уравнение. спасибо :)
строки имеют символы; потоки имеют байты; строки могут быть * закодированы * в байтах, но между ними нет прямой карты, если вы не сначала определите кодировку; неясно, что вы хотите здесь сделать - вы можете * пропустить * байты (читая их, но не обрабатывая их), но вы не можете получить байты «last n», если вы не буферируете не менее n байтов (предположительно в круговой буфер) и дождитесь, пока вы не дойдете до конца потока –
Кстати: ваш код чтения небезопасен; вы могли бы прочитать 1 байт, 0 байт, что угодно до байтов MessageProt.Length'; вы могли бы получить половину логического сообщения, а другая половина по-прежнему находится на маршруте (разделенные пакеты, буферы и т. д.) - в основном: это ** не **, как вы разговариваете с сокетом, если хотите, чтобы он работал надежно –
К сожалению, я пришел к выводу, что когда я пытаюсь читать во второй операции чтения, некоторые байты путаются или не отображаются правильно. Я пытаюсь использовать различный подход, который можно увидеть ниже: – Albzoq