c# - Visual Studio C# SerialPort 数据转 ASCII - Encoding.ASCII.GetString(data, 0, data.Length);
问题描述
我在从 SerialPort 读取的数据转换为 ASCII 时遇到问题。
当 SerialPort 上的所有数据都是 ASCII 时,它一切正常,并且使用 Encoding.ASCII.GetString(data, 0, data.Length);
但是,当我切换到协议模式时,传入的数据有一个数据包的开始(0x02),然后是两个长度字节,然后是 ASCII 字节,最后是一个 CRC 字节,然后是结束字节(0x03)。在协议模式 0x02 中,使用 0x10 对 0x03 进行转义,然后对转义的字节进行 XOR。
由于某种原因,在协议模式下,数据不会以 ASCII 格式显示,而只会显示垃圾,并且没有一个字节是可读文本。
这很奇怪,因为我可以切换到另一个串行终端,即 RealTerm,并以 ASCII 文本形式查看所有传入数据。当然,一些长度字节和 CRC 数据是垃圾,因为不是 ASCII 编码,因为 > 127 十进制。
我使用: Encoding.ASCII.GetString(data, 0, data.Length);
其中 data 是从 SerialPort 接收到的数据字节数组。有什么建议吗?
解决方案
推荐阅读
- c# - 为什么在 XML 序列化期间将命名空间添加到子节点?
- swift - SwiftUI:在修改 EnvironmentObject 的视图主体中调用函数导致无限循环和应用程序崩溃
- ansible - 在 Ansible 中提取特定模式
- amazon-web-services - 关于来自一个 sqs 队列的多个 lambda
- kotlin - 在 Kotlin 中使用索引迭代 IntArray 的最佳方法
- jenkins - 带有共享库的 Jenkinsfile
- javascript - 使用 ReactJS,如何使用 Route 来显示不同的组件?
- c++ - vivado 2018.2 中的 picorv32 risc-v 实现
- cassandra - Cassandra Datastax Java 驱动程序看不到配置中的环境变量
- python - 将数据框列拆分为多列