c#serialport 串口通信 怎么读取二进制文件数据 5
如题,数据是以整形数据存到文件里,怎么用c#serialport串口通信winform中实现打开文件后能读取文件里都二进制数据。。...
如题,数据是以整形数据存到文件里,怎么用c#serialport 串口通信winform中 实现 打开文件后能读取文件里都二进制数据。。
展开
1个回答
2015-04-07 · 知道合伙人互联网行家
关注
展开全部
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;
}
}
{
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询