Читаю из COM-порта байтовую посылку с помощью: string s = comPort.ReadExisting();
В принятой строке меня интересуют не символы, а их ascii коды. Но вот проблема, все хорошо, только если ascii коды символов 7 битные. Если же символ 8 битный, то ему назначается значение 63. Подскажите, как быть. Пробовал и не помогло:
PS если читаю именно байты с помощью функции comPort.Read(), то с перекодировкой проблем нет, но ситуация такая, что порт надо читать именно с помощью comPort.ReadExisting()...
L>PS если читаю именно байты с помощью функции comPort.Read(), то с перекодировкой проблем нет, но ситуация такая, что порт надо читать именно с помощью comPort.ReadExisting()...
if (mSerialPort.BytesToRead>....)
mSerialPort.Read(....);
L>>PS если читаю именно байты с помощью функции comPort.Read(), то с перекодировкой проблем нет, но ситуация такая, что порт надо читать именно с помощью comPort.ReadExisting()...
B>if (mSerialPort.BytesToRead>....) B> mSerialPort.Read(....);
Я же вроде написал, что читать порт мне надо именно с помощью функции comPort.ReadExisting
С помощью Read() как Вы правильно процитировали проблем нет.
Здравствуйте, Loerosim, Вы писали:
L>Читаю из COM-порта байтовую посылку с помощью: string s = comPort.ReadExisting(); L>В принятой строке меня интересуют не символы, а их ascii коды. Но вот проблема, все хорошо, только если ascii коды символов 7 битные. Если же символ 8 битный, то ему назначается значение 63. Подскажите, как быть. Пробовал и не помогло: L>
comPort.Encoding = Encoding.GetEncoding("CP866")
L> string s = comPort.ReadExisting();
L>
L>PS если читаю именно байты с помощью функции comPort.Read(), то с перекодировкой проблем нет, но ситуация такая, что порт надо читать именно с помощью comPort.ReadExisting()...
Попробуй установить encoding для SerialPort, правда, не понятно, зачем вобще читать строку и потом преобразовывать её обратно в байты.
Здравствуйте, k.o., Вы писали:
KO>Здравствуйте, Loerosim, Вы писали:
L>>Читаю из COM-порта байтовую посылку с помощью: string s = comPort.ReadExisting(); L>>В принятой строке меня интересуют не символы, а их ascii коды. Но вот проблема, все хорошо, только если ascii коды символов 7 битные. Если же символ 8 битный, то ему назначается значение 63. Подскажите, как быть. Пробовал и не помогло: L>>
KO> comPort.Encoding = Encoding.GetEncoding("CP866")
L>> string s = comPort.ReadExisting();
L>>
L>>PS если читаю именно байты с помощью функции comPort.Read(), то с перекодировкой проблем нет, но ситуация такая, что порт надо читать именно с помощью comPort.ReadExisting()...
KO>Попробуй установить encoding для SerialPort, правда, не понятно, зачем вобще читать строку и потом преобразовывать её обратно в байты.
Спасибо большое: comPort.Encoding = Encoding.GetEncoding("CP866") то что нужно, все работает.
Читать строку нужно потому, что в других случаях на некоторых com портах есть вероятность возникновения исключения из-за того, что во внутренний реализации класса SerialPort допущена ошибка и установлен бит fAbortOnError структуры DCB — если интересно могу найти статью, описывающую этот момент.
Здравствуйте, Loerosim, Вы писали:
L>Здравствуйте, k.o., Вы писали:
KO>>Здравствуйте, Loerosim, Вы писали:
KO>>Попробуй установить encoding для SerialPort, правда, не понятно, зачем вобще читать строку и потом преобразовывать её обратно в байты.
L>Спасибо большое: comPort.Encoding = Encoding.GetEncoding("CP866") то что нужно, все работает. L>Читать строку нужно потому, что в других случаях на некоторых com портах есть вероятность возникновения исключения из-за того, что во внутренний реализации класса SerialPort допущена ошибка и установлен бит fAbortOnError структуры DCB — если интересно могу найти статью, описывающую этот момент.
Это не оно? Так там, вроде, workaround есть, да и ReadExisting, должен точно также падать, он же, всё-равно, внутри вызывает Read.
Здравствуйте, k.o., Вы писали:
KO>Здравствуйте, Loerosim, Вы писали:
L>>Здравствуйте, k.o., Вы писали:
KO>>>Здравствуйте, Loerosim, Вы писали:
KO>>>Попробуй установить encoding для SerialPort, правда, не понятно, зачем вобще читать строку и потом преобразовывать её обратно в байты.
L>>Спасибо большое: comPort.Encoding = Encoding.GetEncoding("CP866") то что нужно, все работает. L>>Читать строку нужно потому, что в других случаях на некоторых com портах есть вероятность возникновения исключения из-за того, что во внутренний реализации класса SerialPort допущена ошибка и установлен бит fAbortOnError структуры DCB — если интересно могу найти статью, описывающую этот момент.
KO>Это не оно? Так там, вроде, workaround есть, да и ReadExisting, должен точно также падать, он же, всё-равно, внутри вызывает Read.
Оно, но workaround не охота было городить. И как это не парадоксально ReadExisting с этой ошибкой не замечен и не только мной.