永发信息网

c#串口通讯中serialPort_DataReceive读取数据并显示的使用方法:

答案:1  悬赏:20  手机版
解决时间 2021-02-05 05:32
在使用下述代码中、串口设备一直发数据,PC读取的时候i总是会超出数组索引。求助解决办法。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
MsgRectextBox.AppendText("Recieved:" + "\r\n\r\n");
//int Length = serialPort1.BytesToRead;
byte[] MsgRec = new byte[1024*1024];
int Length = -1;
int i = 0;
serialPort1.Read(MsgRec, 0, 1024);
//builder.Clear();
MsgRecCount++;
while (MsgRec[2 + i] != 0xFF)
{
i++;
}
Length = Length + i + 4;
i = 0;
byte[] MsgRec1 = new byte[Length];
for (int j = 0; j < Length; j++)
{
MsgRec1[j] = MsgRec[j];
}
MsgRec1 = dataAnalyzer.ChangFE012FFFE002FE(MsgRec.Take(Length).ToArray());
string result = dataAnalyzer.ToHexString(MsgRec1);
MsgRectextBox.AppendText(MsgRecCount.ToString() + "-" + DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss:fff]") + "\r\n");
MsgRectextBox.AppendText(result + "\r\n");
}
最佳答案
//你的循环条件有问题,当然会超了
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            MsgRectextBox.AppendText("Recieved:" + "\r\n\r\n");
            //int Length = serialPort1.BytesToRead;
            byte[] MsgRec = new byte[1024 * 1024];
            int Length = -1;
            int i = 0;
            serialPort1.Read(MsgRec, 0, 1024);
            //builder.Clear();
            MsgRecCount++;
            while (MsgRec[2 + i] != 0xFF)
            {
                i++;
                if (i + 2 >= 1024)//大于等于数组长度时退出循环
                    break;//加上这个应该就不会超了
            }
            Length = Length + i + 4;
            i = 0;
            byte[] MsgRec1 = new byte[Length];
            for (int j = 0; j < Length; j++)
            {
                MsgRec1[j] = MsgRec[j];
            }
            MsgRec1 = dataAnalyzer.ChangFE012FFFE002FE(MsgRec.Take(Length).ToArray());
            string result = dataAnalyzer.ToHexString(MsgRec1);
            MsgRectextBox.AppendText(MsgRecCount.ToString() + "-" + DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss:fff]") + "\r\n");
            MsgRectextBox.AppendText(result + "\r\n");
        }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
花开的成语有哪些
lol对线瑞文怎么打
高手们,我请教你们!!! 梅捷 SY-A780C-GR V2.0
当x小于零时代数式x分之2的值随x的增大是怎样
无线路由器为什么下载东西,笔记本电脑就断网
同土线/新华村4号路(路口)在哪里啊,我有事要
七个月宝宝为什么喜欢侧着身子睡
何以笙箫默少年何以琛谁演的 少年何以琛扮演
冰棒批发地址在哪,我要去那里办事
现在深圳找工作真的那么难么
手机热血传奇虹魔戒指是刀刀吸血吗
家里露台上摆放鹿有什么说法吗?
协调的四字成语有哪些
神武天兵打什么技能
曼哈顿特区地址在哪,我要去那里办事
推荐资讯
led 灯泡的草帽和圆头有什么区别?
人犯是什么意思
图一副上面画一钟指着十二点正,打一字
为什么我现在总觉得跟一个女生说话,这个女生
追溯什么意思
Noteveryonehasrealizedwhat________importan
怎么入侵别人手机
丹丹美甲化妆连锁店怎么去啊,我要去那办事
梦见猫跳到我手臂上清热我不肯下去
枣强农商银行地址在哪,我要去那里办事
遭遇不偶的意思是什么啊?知道的请说下!
赵客缦胡缨,吴均霜雪明是什么小说里面的一个
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?