我在一个通过串口通信的程序上遇到了问题。它必须发送和接收的字符之一是学位符号ASCII 0xBF。它多年来一直工作得很好,现在突然串口对象开始丢弃位7,所以我得到0x3F而不是0xBF。
我确信这是我所做的一些愚蠢的事情,因为我最近在这方面对我的代码进行了修补-但是我看不出我做了什么导致第8位丢失的事情。
我的端口是这样初始化的:
BaudRate 9600 int
DataBits 8 int
DiscardNull true bool
DtrEnable true bool
Encoding {System.Text.ASCIIEncoding} System.Text.Encoding Handshake None System.IO.Ports.Handshake
NewLine "\n" string
Parity None System.IO.Ports.Parity
ParityReplace 63 byte
PortName "COM4" string
ReadBufferSize 128 int
ReadTimeout 250 int
ReceivedBytesThreshold 1 int
RtsEnable true bool
StopBits One System.IO.Ports.StopBits
WriteBufferSize 64 int
WriteTimeout 1500 int你知道如何将端口恢复为8位操作吗?
发布于 2011-08-25 00:11:15
你的问题是ASCIIEncoding是一个7位的编码。您正在寻找支持Extended ASCII的工具。
下面的代码将为您提供Codepage 1252。
System.Text.Encoding.GetEncoding(1252);这会让你得到ISO 8859-1。
System.Text.Encoding.GetEncoding(28591);这两个都被认为是Extended ASCII,并且都包含通常与此集合关联的符号(大多数具有相同的字节表示),例如©、Both和both。有关每种编码中包含哪些字符的详细信息,请参阅参考链接。
发布于 2011-08-25 00:22:08
System.Text.ASCIIEncoding不是用于8位通信的正确编码。例如,使用"ISO 8859-1拉丁语1;西欧(ISO)“代码页:
port.Encoding = Encoding.GetEncoding(28591);发布于 2011-09-04 20:11:30
1252年和28591中的度数符号似乎都是xB0,而不是xBF。
https://stackoverflow.com/questions/7178655
复制相似问题