C#用serialPort实现串口通信读取byte数据菜鸟求助。

2025-04-23 13:25:50
推荐回答(2个)
回答1:

class Program
{
struct BinData
{
public byte Length; //长度 8bit
public byte[] Header; // 1,2 字节没用
public byte[] Flag;// 3,4 字节截出来
public byte Padding; // 5没用
public byte[] Data; // 7~17 有用
}

static void Main(string[] args)
{
SerialPort sp = new SerialPort("COM3");

sp.Open();
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //注册DataReceived事件,当收到数据时调用 sp_DataReceived
while (true) { }
}

static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
byte[] buf = new byte[port.ReadBufferSize];
int len = 0;

//将数据读入内存流
MemoryStream ms = new MemoryStream();
len = port.Read(buf, 0, buf.Length);
ms.Write(buf, 0, len);

buf = ms.ToArray();
FormatData(buf); //处理数据
}
static BinData FormatData(byte[] buf)
{
BinData d = new BinData();
d.Length = buf[0];//第一字节 长度
d.Header = new byte[2] { buf[1], buf[2] }; //1,2字节没用
d.Flag = new byte[2] { buf[3], buf[4] }; // 3,4 字节截出来
d.Padding = buf[5]; //5没用
byte[] data = new byte[d.Length - 7];
Buffer.BlockCopy(buf, 7, data, 0, d.Length - 7); //截取7~长度-7 数据
d.Data = data;
return d;
}
}

回答2:

搜一下