社区
C#
帖子详情
C#中SerialPort用ReadExisting()接收数据,字符值在0x80到0xff之间字符被自动转化为0x3f,请问这个怎么处理
JovanZhuo
2016-02-01 11:50:25
因为一次接收的串口数据长度是不固定的,所以感觉用同步读取不太好用,而ReadExisting()和ReadLine()返回值都是string,字符串中0x80到0xff之间对应的字符数据都被自动转化为0x3f,求教各位这个怎么处理。
...全文
1090
3
打赏
收藏
C#中SerialPort用ReadExisting()接收数据,字符值在0x80到0xff之间字符被自动转化为0x3f,请问这个怎么处理
因为一次接收的串口数据长度是不固定的,所以感觉用同步读取不太好用,而ReadExisting()和ReadLine()返回值都是string,字符串中0x80到0xff之间对应的字符数据都被自动转化为0x3f,求教各位这个怎么处理。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
无线通信技术爱好者
2018-06-09
打赏
举报
回复
原来是数据溢出了,char的范围最大值是0x7F即127,问题就出在这里。这样执行串口读取操作就可以了: len =sPort->BytesToRead; for(i=0;i<len;i++) { Recieve_Data[Recieve_Count++] = this->sPort->ReadByte(); }
xuzuning
2016-02-01
打赏
举报
回复
0x3f 是 ? 的ASCII 码值 不知道你是用什么方法将 byte[] 转换成 string 的
串口助手源码,
C#
源码,串口实例
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Th
read
ing.Tasks; using System.Windows.Forms; using System.IO.
Port
s; namespace UART1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); COMNUM.
Se
lectedIndex = 2; BaudRate.
Se
lectedIndex = 3; DataBit.
Se
lectedIndex = 3; StopBit.
Se
lectedIndex = 1; CheckBit.
Se
lectedIndex = 0; CharDisp.Checked = true;
Se
ndChar.Checked = true; Clo
se
Comm.Enabled = fal
se
; Data
Se
nd.Enabled = fal
se
; } private void OpenComm_Click(object
se
nder, EventArgs e) {
se
ria
l
Port
1.Clo
se
();
se
ria
l
Port
1.
Port
Name = COMNUM.Text;
se
ria
l
Port
1.BaudRate = Convert.ToInt32(BaudRate.Text);
se
ria
l
Port
1.DataBits = Convert.ToInt32(DataBit.Text); int SPnum = 4; SPnum = StopBit.
Se
lectedIndex; switch (SPnum) { ca
se
0:
se
ria
l
Port
1.StopBits = StopBits.None; break; ca
se
1:
se
ria
l
Port
1.StopBits = StopBits.One; break; ca
se
2:
se
ria
l
Port
1.StopBits = StopBits.OnePointFive; break; ca
se
3:
se
ria
l
Port
1.StopBits = StopBits.Two; break; default: break; } SPnum = CheckBit.
Se
lectedIndex; switch (SPnum) { ca
se
0:
se
ria
l
Port
1.Parity = Parity.None; break; ca
se
1:
se
ria
l
Port
1.Parity = Parity.Odd; break; ca
se
2:
se
ria
l
Port
1.Parity = Parity.Even; break; default: break; } /***************异常
处理
!****************/ try {
se
ria
l
Port
1.Open(); } catch (Exception ex) { MessageBox.Show("错误:"+ex.Message); } /*****************************************/ if (
se
ria
l
Port
1.IsOpen) { Clo
se
Comm.Enabled = true; Data
Se
nd.Enabled = true; OpenComm.Enabled = fal
se
; COMNUM.Enabled = fal
se
; BaudRate.Enabled = fal
se
; DataBit.Enabled = fal
se
; StopBit.Enabled = fal
se
; CheckBit.Enabled = fal
se
; } } private void Clo
se
Comm_Click(object
se
nder, EventArgs e) { try {
se
ria
l
Port
1.Clo
se
(); Clo
se
Comm.Enabled = fal
se
; Data
Se
nd.Enabled = fal
se
; OpenComm.Enabled = true; COMNUM.Enabled = true; BaudRate.Enabled = true; DataBit.Enabled = true; StopBit.Enabled = true; CheckBit.Enabled = true; } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); Clo
se
Comm.Enabled = true; Data
Se
nd.Enabled = true; OpenComm.Enabled = fal
se
; COMNUM.Enabled = fal
se
; BaudRate.Enabled = fal
se
; DataBit.Enabled = fal
se
; StopBit.Enabled = fal
se
; CheckBit.Enabled = fal
se
; } } private void Data
Se
nd_Click(object
se
nder, EventArgs e) { string InputString =
Se
ndBox.Text; /**********发送byte[]实例*********/ //byte[]
Se
ndBytes = new byte[]{
0xff
,0xe0,0xd0,0xc0,0xb0,0xa0,0x90,
0x80
,0x70,0x60}; //int DatasLength =
Se
ndBytes.Length; //
se
ria
l
Port
1.Write(
Se
ndBytes, 0, DatasLength); /*******************************/ if (
Se
ndChar.Checked == true) //以
字符
形式发送,直接发送
字符
串 { try { char[]
Se
ndChars = InputString.ToCharArray(); int CharsLength =
Se
ndChars.Length;
se
ria
l
Port
1.Encoding = System.Text.Encoding.GetEncoding("GB2312"); //解决
中
午乱码问题,国标2312编码格式
se
ria
l
Port
1.Write(
Se
ndChars, 0, CharsLength); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); } } el
se
{ if (
Se
ndHEX.Checked == true) //以HEX形式发送,输入范围:0~255,即0~FF。 { try { byte
Se
ndByte = Convert.ToByte(InputString); try {
se
ria
l
Port
1.Write(String.Format("{0:X}",
Se
ndByte)); } catch (Exception ex) { MessageBox.Show("错误:" + ex.Message); } } catch (Exception) { MessageBox.Show("请输入0~255,即0x00~
0xFF
!"); } } } } private void
Se
ria
l
Port
DataReceive(object
se
nder,
Se
ria
lDataReceivedEventArgs e) { int ReceiveNums =
se
ria
l
Port
1.BytesTo
Read
; if (HEXDisp.Checked == true) { for (int i = 0; i < ReceiveNums; i++) { ReceiveBox.AppendText(String.Format("{0:X2} ",
se
ria
l
Port
1.
Read
Byte())); } } el
se
{ if (CharDisp.Checked == true) { /* for (int i = 0; i < ReceiveNums; i++) { ReceiveBox.AppendText(String.Format("{0:X2}", Convert.ToChar(
se
ria
l
Port
1.
Read
Byte()))); }*/
se
ria
l
Port
1.Encoding = System.Text.Encoding.GetEncoding("GB2312");//解决
中
午乱码问题,国标2312编码格式 ReceiveBox.AppendText(
se
ria
l
Port
1.
Read
Exis
ting
()); } } } private void Clear
Se
nd_Click(object
se
nder, EventArgs e) {
Se
ndBox.Clear(); } private void ClearReceive_Click(object
se
nder, EventArgs e) { ReceiveBox.Clear(); } private void Exit_Click(object
se
nder, EventArgs e) { try {
se
ria
l
Port
1.Clo
se
(); } catch (TimeoutException ex) { MessageBox.Show("错误:" + ex.Message); } Clo
se
(); } } }
C#
中
的串口通信
Se
ria
l
Port
前言 大家好,我是阿辉。 今天这篇文章带大家学习下
C#
中
的串口通讯。在日常的开发工作
中
,如果工作内容是CS方向的同学应该很容易接触到串口通讯方面的业务需求。那么也就很容易想到
C#
中
Se
ria
l
Port
类,它就是专门来
处理
串口通讯相关的。 了解什么是串口通讯 串口通讯是指外设和计算机间通过数据信号线,地线,控制线等,按位进行传输数据的一种通讯方式。 这种通讯方式使用的数据线少,在远距离通信
中
可以节约成本,但其传输速度比并行通讯慢。 串口是计算机上一种非常通用的设备通讯协议。大多数计算机包含两个基于RS-232
C#
Modbus通信从入门到精通(9)——Modbus RTU(0x0F功能码与
C#
代码实现)
本文详细介绍了ModbusRTU协议
中
0x0F写多个线圈功能码的原理、发送报文、返回报文,由高级工程师多年经验总结而成,绝对干货!
16进制字节串口通信
C#
文章目录1. 字节转换16进制
字符
串转int16进制字节转stringstring转16进制字节数组int转16进制
字符
串2.
字符
串
处理
3.串口通信串口发送4.CRC16查表法的校验PS: 16进制字节串口通信 1. 字节转换 字节格式:低字节在前,即小端模式,如0x0102,在传输
中
的字节顺序为:0x02、0x01。 传进来16进制string类型字节流如01 02 03 E5 D1 03 00 0E 00 00 01 00 00 00。 16进制
字符
串转int 还有Convert.ToInt32
C#
Modbus通信从入门到精通(19)——Modbus ASCII(0x0F功能码与
C#
代码实现)
本文详细介绍了ModbusASCII协议
中
0x0F写多个线圈功能码的原理、发送报文、返回报文、
C#
代码实现,由高级工程师多年经验总结而成,绝对干货!
C#
110,499
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章