通信数据格式解析

最近做的一点工作。

基本原理是客户端与服务器一对一通信。客户端作为接收方解析数据,服务器端作为发送端,封包数据

基本封包格式如下:

通信格式说明

101,1,6.8,3, 4494.99,0.264894,0.753365,0.798609,0.395870,0.612474,0.703561,2

101起始位

1设备正常工作与否 (0不正常 1正常)

6.8每段代表的长度

3总的段数

4494.99 实际开始的位置

0.264894,0.753365第1段的特征值1和特征值2

0.798609,0.395870第2段的特征值1和特征值2

0.612474,0.703561第3段的特征值1和特征值2

2当前第2段报警0无报警,非0报警段数

 

解析Demo:

复制代码
 1 #include <string>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 /************************************************************************/
 6 /* 
 7     解析出的长度存放在:  PointsLen
 8     解析出来的Phi数据存放在:PhiArray
 9     解析出来的P数据存放在:PArray
10     解析出来的报警位置数据存放在:AlarmArray
11 */
12 /************************************************************************/
13 
14 
15 int main()
16 {
17     //string RecvStr="101,1,6.810597,293,4495,0.000052,0.000025,0.000069,0.000038,0.000006,0.000016,0.000004,0.000003,0.000006,0.000009,0.000009,0.000005,0.000008,0.000003,0.000028,0.000013,0.000075,0.000005,0.000007,0.000003,0.000007,0.000004,0.000012,0.000010,0.000005,0.000012,0.000021,0.000005,0.000004,0.000026,0.000009,0.000007,0.000002,0.000051,0.000005,0.000004,0.000009,0.000007,0.000001,0.000003,0.000002,0.000004,0.000002,0.000002,0.000005,0.000008,0.000686,0.000074,0.000005,0.000126,0.000041,0.000119,0.000015,0.000003,0.000032,0.000010,0.000030,0.000032,0.000006,0.000009,0.000042,0.000085,0.000004,0.000034,0.000028,0.000030,0.000043,0.000136,0.000012,0.000085,0.000030,0.000022,0.000006,0.000013,0.000075,0.000005,0.000258,0.000003,0.000876,0.000454,0.000010,0.000011,0.000009,0.000005,0.000019,0.000004,0.000006,0.000007,0.000004,0.000007,0.000007,0.000005,0.000003,0.000008,0.000027,0.000012,0.000038,0.000006,0.000006,0.000008,0.000018,0.000006,0.000025,0.000010,0.000014,0.000037,0.000091,0.000021,0.000036,0.000005,0.000008,0.000013,0.000002,0.000040,0.000010,0.000003,0.000009,0.000031,0.000014,0.000004,0.000007,0.000160,0.000235,0.000443,0.000462,0.000682,0.004006,0.010638,0.002449,0.000038,0.000007,0.000058,0.000007,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000035,0.000039,0.000045,0.000045,0.000041,0.000040,0.000039,0.000040,0.000039,0.000041,0.000038,0.000033,0.000023,0.000018,0.000012,0.000010,0.000010,0.000011,0.000010,0.000005,0.000008,0.000011,0.000018,0.000027,0.000027,0.000018,0.000012,0.000006,0.000005,0.000005,0.000005,0.000005,0.000007,0.000005,0.000009,0.000010,0.000006,0.000004,0.000004,0.000005,0.000005,0.000007,0.000006,0.000004,0.000002,0.000001,0.000001,0.000002,0.000004,0.000005,0.000007,0.000007,0.000010,0.000012,0.000009,0.000008,0.000006,0.000006,0.000005,0.000006,0.000005,0.000006,0.000009,0.000014,0.000014,0.000010,0.000004,0.000003,0.000003,0.000002,0.000002,0.000003,0.000004,0.000006,0.000005,0.000003,0.000002,0.000002,0.000001,0.000001,0.000005,0.000003,0.000003,0.000003,0.000004,0.000005,0.000006,0.000007,0.000007,0.000005,0.000003,0.000003,0.000003,0.000004,0.000007,0.000010,0.000012,0.000022,0.000029,0.000029,0.000020,0.000017,0.000012,0.000010,0.000014,0.000017,0.000019,0.000020,0.000013,0.000012,0.000012,0.000014,0.000015,0.000014,0.000014,0.000016,0.000022,0.000022,0.000021,0.000017,0.000011,0.000008,0.000012,0.000015,0.000011,0.000045,0.000171,0.000432,0.000686,0.000933,0.001000,0.000926,0.000819,0.000700,0.000574,0.000463,0.000379,0.000303,0.000245,0.000208,0.000165,0.000133,0.000110,0.000093,0.000077,0.000065,0.000054,0.000045,0.000037,0.000030,0.000025,0.000022,0.000023,0.000019,0.000018,0.000015,0.000010,0.000008,0.000008,0.000007,0.000007,0.000006,0.000005,0.000004,0.000004,0.000004,0.000003,0.000002,0.000003,0.000002,0.000002,0.000001,0.000002,0.000002,0.000002,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000000,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000002,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000000,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000000,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000000,0.000001,0.000001,0.000001,0.000001,0.000000,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,0.000000,0.000031,0.000021,5.000000,126.0000000,74.0000000";
18     string RecvStr="101,1,6.810597,4,4495,0.00001,0.00002,0.00003,0.00004,0.00005,0.00006,0.00007,0.00008,5.000,7.000,9.000";                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
19     RecvStr=RecvStr.substr(15,RecvStr.length()-15);
20     string Points=RecvStr.substr(0,RecvStr.find(','));
21     int PointsLen=atoi(Points.c_str());
22 
23     cout<<PointsLen<<endl;
24 
25 
26 
27     string RecvStrTemp(RecvStr,RecvStr.find(Points)+Points.length()+1);
28 
29     string BeginPosStr=RecvStrTemp.substr(0,RecvStrTemp.find(','));
30     int BeginPos=atoi(BeginPosStr.c_str());
31 
32     string RecvBufNew(RecvStrTemp,RecvStrTemp.find(BeginPosStr)+BeginPosStr.length()+1);
33     
34 
35     double *PhiArray=new double[PointsLen];
36     double *PArray=new double[PointsLen];
37     
38     int count=0;
39     while(count<PointsLen)
40     {
41         string TempPhiStr=RecvBufNew.substr(0,RecvBufNew.find(','));
42         double ValueOne=atof(TempPhiStr.c_str());
43         
44         PhiArray[count]=ValueOne;
45         cout<<"PhiValue:"<<PhiArray[count]<<endl;
46 
47 
48         
49         RecvBufNew=RecvBufNew.substr(TempPhiStr.length()+1,RecvBufNew.length()-TempPhiStr.length());
50 
51         string TempPstr=RecvBufNew.substr(0,RecvBufNew.find(','));
52         double ValueTwo=atof(TempPstr.c_str());
53 
54         PArray[count]=ValueTwo;
55         cout<<"PValue:"<<PArray[count]<<endl;
56 
57         int a=TempPstr.length()+1;
58         int b=RecvBufNew.length()-TempPstr.length();
59 
60         if(b==0)
61         {
62             delete[] PhiArray;
63             delete[] PArray;
64             system("pause");
65             return 0;
66         }
67 
68         RecvBufNew=RecvBufNew.substr(TempPstr.length()+1,RecvBufNew.length()-TempPstr.length());
69         count++;
70     }
71 
72 
73     int AlarmArray[10]={0};
74     int AlarmCount=0;
75     while(!RecvBufNew.empty())
76     {
77         string TempPhiStr=RecvBufNew.substr(0,RecvBufNew.find(','));
78         AlarmArray[AlarmCount]=(int)atof(TempPhiStr.c_str());
79         cout<<"AlarmPos:"<<AlarmArray[AlarmCount]<<endl;
80         AlarmCount++;
81         int a=TempPhiStr.length()+1;
82         int b=RecvBufNew.length()-TempPhiStr.length();
83 
84         if(b==0)
85             break;
86         RecvBufNew=RecvBufNew.substr(TempPhiStr.length()+1,RecvBufNew.length()-TempPhiStr.length());
87     }
88 
89 
90     delete[] PhiArray;
91     delete[] PArray;
92     system("pause");
93     return 0;
94 }
复制代码

结果:


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C 串口通信发送数据格式通常是指在C语言中使用串口进行通信时,发送数据的格式规定。串口通信是一种通过串行口传输数据的方式,一般通过串行口将数据以字节的形式传输。 C 串口通信发送数据格式一般包括以下几个方面: 1. 数据位:指每个数据字节所占用的位数,常见的有8位数据位。在C语言中,可以使用相应的函数来设置数据位。 2. 停止位:指在每个数据字节后所添加的位,用于标识数据的结束。常见的有1位停止位。同样,C语言中也提供了函数来设置停止位。 3. 校验位:指用于验证数据传输的完整性和准确性的一位数据。常见的校验位有奇校验和偶校验。使用C语言时,可以通过函数来设置校验位。 4. 波特率:指在串口通信中传输数据的速度。在C语言中,可以通过相应的函数来设置波特率。 5. 硬件控制流:指使用硬件信号线来控制数据的流动。常见的硬件控制流有RTS/CTS流控制和DTR/DSR流控制。在C语言中,可以使用相应的函数来进行硬件控制流的设置。 总之,C 串口通信发送数据格式是通过设置数据位、停止位、校验位、波特率和硬件控制流等参数,来规定以何种方式发送数据的一种规范。这可以帮助串口设备之间进行正常、准确、稳定的数据传输。 ### 回答2: C串口通信发送数据格式指的是通过C语言编程实现串口通信时,发送数据时的数据格式。一般来说,串口通信发送数据格式包括以下几个方面: 首先是数据的位数,一般是8位或者是9位。其中,8位数据格式是最常用的,每个字节的数据占用8个位,可以表示256种不同的字符或者控制码;而9位数据格式则是在前面的8位数据格式基础上,增加了一个校验位,用来进行数据校验,提高数据传输的可靠性。 其次是数据的停止位数,一般是1位或者是2位。停止位用来标识每个字节的结束,1位停止位适用于大多数情况,而2位停止位则在某些特殊情况下使用。 再次是数据的校验方式,一般有奇偶校验、偶偶校验、奇奇校验和无校验四种方式。奇偶校验和偶偶校验分别在每个字节的数据位之后,加上一个校验位,使得每个字节中1的个数为奇数或偶数;奇奇校验和偶偶校验在每个字节的数据位之前和之后,分别加上两个校验位,使得每个字节中1的个数为奇数或偶数;而无校验则没有校验位。 最后是数据的流控方式,一般有硬件流控和软件流控两种方式。硬件流控通过控制串口的RTS(请求发送)和CTS(清除发送)引脚来实现;而软件流控则是通过控制软件的方式来实现,需要在程序中编写相应的流控代码。 总的来说,C串口通信发送数据格式需要确定数据位数、停止位数、校验方式和流控方式,以保证数据能够按照预期的格式正确地发送出去。 ### 回答3: C串口通信发送数据格式是指通过C语言程序向串口发送数据时,所要遵循的数据格式规范。串口通信是计算机与外部设备之间的一种通信方式,常用于与单片机、传感器、模块等进行数据交互。以下为C串口通信发送数据格式的一般步骤和规定: 1. 打开串口:通过C语言的串口库函数,打开要使用的串口端口,如COM1、COM2等。 2. 配置串口参数:设置串口通信的一些基本参数,如波特率、数据位、停止位、校验位等。波特率是串口通信速率的单位,用来确定数据传输的速度。 3. 创建数据帧:将要发送的数据按照一定的格式组装成数据帧。数据帧通常包含起始位、数据位、校验位和停止位。起始位用来表示数据的开始;数据位是实际传输的数据;校验位用来检测数据传输过程中的错误;停止位标志数据传输的结束。 4. 发送数据:使用C语言的串口发送函数,将数据帧通过串口发送给外部设备。发送函数通常是通过写入串口的寄存器来实现。 5. 关闭串口:在数据发送完成后,需要关闭串口,释放资源。 需要注意的是,串口通信发送数据格式在不同的设备和应用场景中可能有所不同,具体的格式要根据实际情况进行确定,并且发送的数据需要与接收端的解析程序相对应,以确保数据的正确传输和解析。此外,还应考虑数据的传输速率、数据的完整性和可靠性等因素,以保证通信的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值