2013-10-25 2 views
2

모든 예제 코드 중 SerialPorts에 관해 온라인으로 읽은 모든 코드는 ReadByte를 사용하고 그 다음에 ReadChar를 사용하는 대신 Character로 변환합니다.ReadPort를 통해 SerialPort.ReadByte를 사용하는 것이 유리합니까?

이렇게하는 것이 유리합니까?

+1

필자는 확실히 알고있는'SerialPort'에 익숙하지 않지만'ReadChar'는 문자 인코딩에 따라 단일 바이트를 읽을 수 없다고 생각합니다. –

답변

3

SerialPort.Encoding 속성은 종종 오해됩니다. 기본값은 ASCIIEncoding입니다. 바이트 값 0x80..0xFF. 그래서 그들은이 물음표를 얻는 것을 좋아하지 않습니다. 그런 코드를보고 직접 바이트를 char로 변환하면 유니 코드는 그 바이트 범위에 unprintable codepoints을 많이 가지고 있으며 실제로이 문자를 보낼 의도가있는 확률은 0입니다. 문자열은 바이트 []보다 처리하기 쉬운 것으로 간주되는 경향이 있습니다.

3

ReadChar를 사용할 때 @Preston Guillot과 같이 사용중인 인코딩을 기반으로합니다. ReadChar의 문서에 따르면 :

이 메서드는 인코딩을 기반으로 완전한 문자 하나를 읽습니다.

ReadByte과 ReadChar를 함께 사용할 때는주의하십시오. 읽기 바이트와 읽기 문자 사이에 을 전환하면 에 대한 추가 데이터가 읽히거나 의도하지 않은 다른 동작이 발생할 수 있습니다. 텍스트를 읽는 중이고 스트림의 이진 데이터를 읽는 중일 때 을 전환해야하는 경우 수동으로 바이트를 읽고 데이터를 디코딩하는 것과 같이 텍스트와 이진 데이터 사이의 경계를 신중하게 정의하는 프로토콜을 선택하십시오.

관련 문제