2009-12-03 4 views
1

Для моей программы на C#, чтобы работать как интерфейс последовательного порта, мне нужно отправить «ENQ» и ожидать «ACK».Как отправить символ ASCII в программе C#

Из того, что я понял в ответах на мои более ранние вопросы на этом форуме, я думаю, что система ожидает, что я отправлю «5» и вернул «6» (эквиваленты ASCII ENQ и ACK).
Итак, вместо отправки строки, которая является «ENQ», я могу отправить символ, который равен «5»?

Спасибо за все ответы, в которых указано, что «5» не является ASCII 5 в C#.
Хорошо, я читал комментарии сейчас, я попробую:

serialPort.Write(new byte[]{5},0,1); 

ответ

1

Если вы используете объект SerialPort и метод WriteLine, попробуйте следующее:

SerialPort serialPort = ...;  
...  
string message = ((char) 5).ToString(); 
serialPort.WriteLine(message); 

Для устранения замечаний, вы можете изменить SerialPort.NewLine свойство быть вашим «конец передачи» символ, который, в этом case, может быть char 5. Я разработал против нескольких машин, которые использовали ETX в качестве символа «конец сообщения». Если вы постоянно используете Write, а затем вам нужно написать char 5 для завершения вашего сообщения, рассмотрите этот маршрут.

+0

Таким образом, он отправил бы два байта, а не один. – EricSchaefer

+0

и WriteLine отправили бы CRLF после того, как тоже может быть не то, что вы хотите – tjmoore

+0

На самом деле это нормально. SerialPort по умолчанию кодирует как ASCIIEncoding, а что-то большее, чем 127, кодируется как значение 63 (http://msdn.microsoft.com/en-us/library/y2sxhat8.aspx). CRLF по-прежнему стоит, но, возможно, это то, что вам нужно. Тебе нужно будет проверить. – tjmoore

3

Отправить байт без знака через последовательный порт, со значением 5.

Вам нужно будет проверить, чтобы проверить, но все вероятно, будет неподписанным, поэтому вы можете получить 0-255 в качестве значений.

+0

Нечто вроде serialPort.Write (новый байт [] {5}, 0,1); , если вы используете класс SerialPort из .Net –

+0

За исключением того, что новый байт будет подписан, и, скорее всего, он должен быть неподписанным. У меня возникла проблема с реализацией SPI, где драйвер использовал байты и ints, и мне потребовалось немного отследить, что подписанная может быть очень-очень плохой. –

+0

байт не подписан. –

0

Вы не можете отправить символ, который равен 5, в символах C# используется 16-разрядный символ юникода.

Вы можете отправить n байта без знака со значением 5, хотя.

Смежные вопросы