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

单片机向PC进行串口通信,串口发送的数据格式为:|@pitch,-1.04;|@roll,67.74;|@yaw,61.16;||@pitch,-1.04;|@roll,... 单片机 向 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;
这个时候显示的我就不明白了,查了查说是计算机每次从缓冲区里读取出来的数量是不一定得,我以为是一条一条的,所以出现下面的问题:

数据不是一条一条的,我也就不知道该怎么处理了,求帮助!
最终想要的效果就是把每帧数据中的三个值读取出来,然后进行计算,应该怎么做呢?
展开
 我来答
百度网友62efd0c
2014-08-27 · TA获得超过405个赞
知道小有建树答主
回答量:854
采纳率:0%
帮助的人:614万
展开全部
串口的本质是一个个字符发的,所以你收到的时候有可能不是一个完整的字节。你可以一个个字符判断,收到完整的一行数据后进行处理。
追问
嗯,这个方法我也想了,不过不知道该具体怎么做。
是先判断第一个字符是不是@,如果是的话就存到一个char数组,然后继续往下判断?如果第二个字符不对,那第一个字符怎么办?新手,求带~!
追答
用有限状态机 收到 | 进入状态1, @进入2 p进入3.。。。 h进入状态7, 7之后收到其他数保存,收到|进入8,。。。。  最后收到;进入倒数第二个状态, |进入最后一个状态,处理收到的数据
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式