C++串口数据接收,如何把需要的数据提取出来??

单片机 向 PC进行串口通信,串口发送的数据格式为:
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|
|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;|

然后我用c++来接收:
/** 读取输入缓冲区中的数据并输出显示 */
char cRecved = 0x00;
int temp = 0;
char charArr[1024] = {};
std::wstringbuf *strbuf;

do
{
cRecved = 0x00;
if(pSerialPort->ReadChar(cRecved) == true)
{

charArr[temp] = cRecved;
temp++;

continue;
}
}while(--BytesInQue);
std::string str = charArr;
std::cout<<str;
std::cout<<"--------------------------------------------------------------------------"<<std::endl;
这个时候显示的我就不明白了,查了查说是计算机每次从缓冲区里读取出来的数量是不一定得,我以为是一条一条的,所以出现下面的问题:

数据不是一条一条的,我也就不知道该怎么处理了,求帮助!
最终想要的效果就是把每帧数据中的三个值读取出来,然后进行计算,应该怎么做呢?

串口的本质是一个个字符发的,所以你收到的时候有可能不是一个完整的字节。你可以一个个字符判断,收到完整的一行数据后进行处理。追问

嗯,这个方法我也想了,不过不知道该具体怎么做。
是先判断第一个字符是不是@,如果是的话就存到一个char数组,然后继续往下判断?如果第二个字符不对,那第一个字符怎么办?新手,求带~!

追答

用有限状态机 收到 | 进入状态1, @进入2 p进入3.。。。 h进入状态7, 7之后收到其他数保存,收到|进入8,。。。。 最后收到;进入倒数第二个状态, |进入最后一个状态,处理收到的数据

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网