物联网中常用的数据处理方法

举报
果果小师弟 发表于 2021/05/29 13:18:05 2021/05/29
【摘要】 取出某一段数据中的某部分数据 /*********************************************************** 函数名称:Find_string(char *pcBuf,char*left,char*right, char *pcRes) 函数功能:寻找特定字符串 入口参数: char *pcBuf 为传入的字符串 ...

取出某一段数据中的某部分数据

/***********************************************************
  函数名称:Find_string(char *pcBuf,char*left,char*right, char *pcRes)
  函数功能:寻找特定字符串
  入口参数: char *pcBuf 为传入的字符串 char*left   为搜索字符的左边标识符  例如:"[" char*right  为搜索字符的右边标识符  例如:"]" char *pcRes 为输出转存的字符串数组
  返回值:用来校验是否成功,无所谓的。
  备注: left字符需要唯一,right字符从left后面开始唯一即可
 服务器下发命令举例:+MQTTPUBLISH: 0,0,0,0,/device/NB/zx99999999999999_back,6,[reastrobot]
 如要取出 IMEI:4569874236597\r\n  中的数字4569874236597
***********************************************************/
int Find_string(char *pcBuf,char *left,char *right, char *pcRes)
{ char *pcBegin = NULL; char *pcEnd = NULL; pcBegin = strstr(pcBuf, left);//取出左边数据 pcEnd = strstr(pcBegin+strlen(left), right);//扫描右边标识 if(pcBegin == NULL || pcEnd == NULL || pcBegin > pcEnd) { printf("string name not found!\n"); return 0; } else { pcBegin += strlen(left); memcpy(pcRes, pcBegin, pcEnd-pcBegin); return 1; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

strstr使用方法

https://www.runoob.com/cprogramming/c-function-strstr.html

解释:

C 库函数char *strstr(const char *haystack, const char *needle)在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。

声明

下面是 strstr() 函数的声明。

char *strstr(const char *haystack, const char *needle)

  
 
  • 1

参数

haystack -- 要被检索的 C 字符串。
needle -- 在 haystack 字符串内要搜索的小字符串。

  
 
  • 1
  • 2

返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

实例

下面的实例演示了 strstr() 函数的用法。
实例

#include <stdio.h>
#include <string.h> 
int main()
{ const char haystack[20] = "RUNOOB"; const char needle[10] = "NOOB"; char *ret; ret = strstr(haystack, needle); printf("子字符串是: %s\n", ret); return(0);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

让我们编译并运行上面的程序,这将产生以下结果:

子字符串是: NOOB

memcpy()使用方法

https://www.runoob.com/cprogramming/c-function-memcpy.html

一、memset

void *memset(void *s, int ch, size_t n);

  
 
  • 1

函数解释:将s中当前位置后面的n个字节(typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方。

memset()函数原型是 extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c:是赋给buffer的值, count:是buffer的长度.

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

memset() 函数常用于内存空间初始化。如:
char str[100];
memset(str,0,100);
memset的作用就是把str这个数组中的值初始化为0

二、sprintf

# include<stdio.h>
int sprintf(char *str, char *format ,...);

  
 
  • 1
  • 2

功能:
根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符’\0’为止。
参数:

参数列表
str:字符串首地址
format:这是字符串,包含了要被写入到字符串str的文本,可以包含嵌入的format标签
…:根据不同的format字符串,函数可能需要一系列的附加参数
返回值:
成功:实际格式化字符的个数
失败:-1
例子:
编译环境为VS2017,是在c环境下编译,同时为了不使sprintf函数出错,需要 右键单击工程名——>属性——>C/C++——>常规——>SDL检查(将SDL检查改为否)

	#include<stdio.h>
	#include<string.h>
	#define a "hello"
	#define b "world"
	int main()
	{
		//1.格式化字符串 
		char buf[1024];
		sprintf(buf, "hello %s", "world");
		printf("buf:%s\n", buf);
		printf("len:%d\n\n", strlen(buf)); //2.拼接字符串 
		char temp[1024];
		char *s1 = "hello";
		char *s2 = "world";
		memset(temp, 0, 1024);
		sprintf(temp, "%s %s", s1,s2);
		printf("buf:%s\n", temp);
		printf("len:%d\n\n", strlen(temp)); //2.1拼接字符串 
		char str[1024];
		sprintf(str, "%s %s", a, b);
		printf("buf:%s\n", str);
		printf("len%d\n\n", strlen(str)); //3.数字转换成字符串打印出来
		char num[1024];
		int number = 666;
		memset(num, 0, 1024);
		sprintf(num, "%d", number);
		printf("buf:%s\n", num);
		printf("len:%d\n\n", strlen(num)); //4.设置宽度右对齐
		char buffer[1024];
		memset(buffer, 0, 1024);
		sprintf(buffer, "%8d", number);
		printf("buf:%s\n", buffer);
		printf("len:%d\n\n", strlen(buffer)); //5.设置宽度左对齐
		memset(buffer, 0, 1024);
		sprintf(buffer, "%-8d", number);
		printf("buf:%s\n", buffer);
		printf("len:%d\n\n", strlen(buffer)); //6.转换成16进制字符串 小写
		memset(buffer, 0, 1024);
		sprintf(buffer, "0x%x", number);
		printf("buf:%s\n", buffer);
		printf("len:%d\n\n", strlen(buffer)); //6.转换成8进制字符串
		memset(buffer, 0, 1024);
		sprintf(buffer, "0%o", number);
		printf("buf:%s\n", buffer);
		printf("len:%d\n\n", strlen(buffer));
	}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

文章来源: blog.csdn.net,作者:果果小师弟,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_39400113/article/details/115565834

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。