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

简介: 取出某一段数据中的某部分数据

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

/***********************************************************
  函数名称: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;
    }
}

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)

参数

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

返回值

该函数返回在 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);
}

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

子字符串是: NOOB

memcpy()使用方法

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

一、memset

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

函数解释:将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的长度.

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

二、sprintf

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

功能:

根据参数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));
    }
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
JSON 算法 物联网
物联网中利用OTA技术升级的基本原理与方法
物联网中利用OTA技术升级的基本原理与方法
335 0
|
4月前
|
存储 数据采集 边缘计算
物联网设备的边缘计算与数据处理:技术革新与应用展望
【7月更文挑战第8天】物联网设备的边缘计算与数据处理技术是推动物联网技术发展的重要力量。通过将数据处理和决策推向设备边缘,边缘计算实现了低延迟、数据隐私和安全、带宽优化以及可靠性等优势,为物联网应用的实时性、智能化和高效性提供了有力保障。未来,随着技术的不断进步和创新,边缘计算将在物联网领域发挥更加重要的作用,推动物联网技术的进一步发展。
|
4月前
|
数据采集 存储 运维
物联网设备的数据处理与分析技术探讨
【7月更文挑战第2天】探索物联网(IoT)数据处理技术,涵盖数据采集(传感器、无线通信)、存储(分布式系统、NoSQL)、处理(清洗、压缩、转换)和分析(描述性、聚类、分类、异常检测)。未来趋势涉及AI集成、边缘计算、多模态处理和系统自主化。随着技术演进,期待更智能、高效的解决方案。
|
5月前
|
边缘计算 人工智能 物联网
边缘计算:为物联网带来更快速的数据处理
【6月更文挑战第4天】物联网快速发展,边缘计算应运而生,解决云计算的延迟与带宽挑战。边缘计算将处理能力移至数据源附近,提升响应速度,保障实时性应用(如自动驾驶)的安全性。同时,它减轻网络压力,增强数据隐私保护。示例代码展示如何在边缘设备上用Python进行实时人脸识别,体现边缘计算的实时性和隐私性。边缘计算结合5G、AI,将推动物联网进入新阶段,打造更智能、高效、安全的物联世界。
71 0
|
6月前
|
机器学习/深度学习 人工智能 物联网
物联网的数据处理平台有哪些
物联网的数据处理平台有哪些
|
存储 机器学习/深度学习 传感器
微软保护物联网的新颖方法
微软保护物联网的新颖方法
|
算法 安全 物联网安全
物联网安全|位置隐私保护方法
物联网安全|位置隐私保护方法
475 15
物联网安全|位置隐私保护方法
|
Cloud Native 多模数据库 物联网
《云原生多模数据库Lindorm:物联网的数据处理平台》电子版地址
云原生多模数据库Lindorm:物联网的数据处理平台-final
183 15
《云原生多模数据库Lindorm:物联网的数据处理平台》电子版地址
|
Ubuntu 物联网 API
物联网智能家居基本方法实现之经典
今天主要和大家聊一聊,智能家居物联网的实现,今天主要使用Qt开发智能家居的一个物联应用。可以利用云服务远程控制设备并与设备通信。本文将实现远程点亮开发板的LED作为一个实例。​
318 0
物联网智能家居基本方法实现之经典

相关产品

  • 物联网平台