工业控制(十六进制)比json高效,但难解析
一接收到就是一帧 (一帧数据350个字节)
帧:
帧--就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一副静止的画面,连续的帧就形成动画,如电视图象等。 我们通常说帧数,简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。
花括号内的所用东西都叫字符串
JSON使用:
- 构建串口读程序;
- 读到哪里读多长,定义存储字符数组。UBUF(串口缓存区) char UBUF[512]
- 构建解析程序,自定义解析方法
所用函数:strstr();memset();memcpy(); sscanf(); atof();sprint();指针,s(开始),e(结尾)
- 解析后输出验证正确性。
函数中有return 结束次函数
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
1.花括号{} 数据包
2.数据间隔 :(一双)
3.双引号
4.数据和数据之间 逗号 ,
Example:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
基础结构
JSON建构于两种结构:
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
C语言数据解析(JSON历程)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAXLEN 80
float T,W;
void parseUDPPackage2( char *p);//数据解析
char BUFS[MAXLEN]="TYPE:32002\r\nTEMP:20.4C\r\nBAT:7.1V(EXT)\r\nWT:15.06g\r\n";
int main( )
{
parseUDPPackage2(BUFS);//解析函数声明
printf("获取到的温度是:%.2f\n",T);
printf("获取到的重量是:%.2f\n",W);
}
void parseUDPPackage2(char *p)//数据解析
{
puts(p);
if(strstr(p,"TYPE:") !=NULL)//如果找到了开头标识TYPE:往下找
{
char *s,*e;//定义首尾指针
char temp[20];//定义temp临时数组
if(strstr(p,"TEMP:")!=NULL)//如果找到了TEMP:不为空 就是找到了
{
//-----------查询温度处理--------------
s=strstr(p,"TEMP:");//返回TEMP:的指针给s
if(s==NULL) //如果为空退出程序 就是没找到
return;
s = strstr(s,":");//在TEMP:的指针出找出:的指针位置返回给s
if(s==NULL) //如果为空退出程序
return;
e=strstr(s,"\r\n");//在:的基础上查找\r\n结束标志返回给e找到开头和结束的指针位置
if(e==NULL)// 如果为空退出程序
return;
memset(temp,0x00,20);//先清零
memcpy(temp,s+1,e-s-1);//存入找到的数据
//T=atof(temp);//将数组中的字符浮点数转换成浮点类型数据
sscanf(temp,"%f",&T); //和atof功能一致
//-----------查询重量处理--------------
s=e;//把尾部指针给头部
s=strstr(s,"WT:");//返回WT:的指针给s
if(s==NULL) //如果为空退出程序
return;
s = strstr(s,":");//在TEMP:的指针出找出:的指针位置返回给s
if(s==NULL) //如果为空退出程序
return;
e=strstr(s,"\r\n");
if(e==NULL)
return;
memset(temp,0x00,20);
memcpy(temp,s+1,e-s-1);
sscanf(temp,"%f",&W);
}
}
}