首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SerialPort编码-如何获得8位ASCII码?

SerialPort编码-如何获得8位ASCII码?
EN

Stack Overflow用户
提问于 2011-08-25 00:04:54
回答 3查看 26K关注 0票数 1

我在一个通过串口通信的程序上遇到了问题。它必须发送和接收的字符之一是学位符号ASCII 0xBF。它多年来一直工作得很好,现在突然串口对象开始丢弃位7,所以我得到0x3F而不是0xBF。

我确信这是我所做的一些愚蠢的事情,因为我最近在这方面对我的代码进行了修补-但是我看不出我做了什么导致第8位丢失的事情。

我的端口是这样初始化的:

代码语言:javascript
复制
    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位操作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 00:11:15

你的问题是ASCIIEncoding是一个7位的编码。您正在寻找支持Extended ASCII的工具。

下面的代码将为您提供Codepage 1252

代码语言:javascript
复制
System.Text.Encoding.GetEncoding(1252);

这会让你得到ISO 8859-1

代码语言:javascript
复制
System.Text.Encoding.GetEncoding(28591);

这两个都被认为是Extended ASCII,并且都包含通常与此集合关联的符号(大多数具有相同的字节表示),例如©、Both和both。有关每种编码中包含哪些字符的详细信息,请参阅参考链接。

票数 11
EN

Stack Overflow用户

发布于 2011-08-25 00:22:08

System.Text.ASCIIEncoding不是用于8位通信的正确编码。例如,使用"ISO 8859-1拉丁语1;西欧(ISO)“代码页:

代码语言:javascript
复制
port.Encoding = Encoding.GetEncoding(28591);
票数 3
EN

Stack Overflow用户

发布于 2011-09-04 20:11:30

1252年和28591中的度数符号似乎都是xB0,而不是xBF。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7178655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档