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

已知发送过来的是二进制数据,有一定格式:首先是个8bit(一字节?)的数字,表示后面的长度,例如00010001……表示后面还有17字节的内容,17字节里1.2字节没用,... 已知发送过来的是二进制数据,有一定格式:
首先是个 8 bit(一字节?)的 数字,表示后面的长度,例如00010001……表示后面还有17字节的内容,17字节里1.2字节没用,3.4要截取出来,5没用,7~17有用……
serialPort1.Read() serialPort1.ReadLine()神马的不大会用啊。
serialPort.DataRecived()事件用起来也怪怪的。
到底怎么读啊~~o(>_<)o ~~
展开
 我来答
百度网友1fd4459
2012-05-07 · TA获得超过356个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:272万
展开全部
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;
}
}
追问
恩。看着挺靠谱。我试试。谢谢赐教。
匿名用户
2012-05-05
展开全部
搜一下

参考资料: http://baike.baidu.com/view/2910631.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式