物联网中常用的数据处理方法
取出某一段数据中的某部分数据
/***********************************************************
函数名称: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
- 点赞
- 收藏
- 关注作者
评论(0)