• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机收到一串字符,怎么从这一串字符中只提取需要的内容?

676d355b4883e879 2019-03-19 浏览量:2106
就是收到TVOC 1438 ppb eCO2 2678 ppm。但是我只需要2678?单片机收到的数据是什么类型的数据?是否需要转换?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你接收到的是一串unsigned char 的字符。

    1、如果每次的位置不变可以直接通过位置来取出2678.

    2、看你这个应该是什么检测环境的数据,可以相对TVOC和eCO2的位置来取出数据。

    3、得到了一个unsigned char的数组之后。

    int meatured_value = (USART2_RX_BUF[0]-0x30)*1000+(USART2_RX_BUF[1]-0x30)*100+(USART2_RX_BUF[2]-0x30)*10+(USART2_RX_BUF[3]-0x30);​即可

    • 发布于 2019-03-19
    • 举报
    • 评论 2
    • 0
    • 0
676d355b4883e879 回复了 大棒棒猪:每次发的都是这个格式,单片机收到这个格式的数据后怎么处理?第三步看不大懂呀 回复
大棒棒猪 回复了 大棒棒猪:因为你串口收到的数据是字符串型。取出数据之后,比如2678这个是 unsigned char value[4]={2678}。所以要将每个unsigned char转化为int型。 回复

其他答案 数量:13
  • 已经收到数据了,下面就是找到特定的数据,另行存储。

    通常这种是循环比较,因为你知道要的是哪些数据,或者数据在哪些位置,那就到了这个位置比较数据,然后取出来就行。

    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 1
    • 0

  • 可以通过检测空格区分,或者检测数字,如果位置固定的那就更容易了,直接从某个位置读取
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 从你发出来的字符串看,还是挺有规律的,保存整个字符串数组,查找匹配到“eCO2 ”后,“ ppm”前的数据就好了(“eCO2”后设立标志位,开始截取,截取到空格)。


    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个就是字符串处理啦

    一般需要字符串有特定的格式(这样处理最方便)

    比如约定的前导字符串可以对应规定的多种详细内容格式

    这样就可以方便的提取

    这就类似AT+XXXX+xxxxxxx

    这样的字符句子

    明确了命令前导是AT,用+分割

    XXXX代表具体指令,

    xxxxxxx代表指令参数(可以是多个)

    这样的系统

    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 收到的是什么类型的数据主要取决于你发送的是什么类型的数据,若果是字符串那就一位一位判断,如果是整型直接进行数值比较
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以进行协议帧的定义,并根据帧结构提取有用的数据
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 用DMA或者中断的方式将全部数据先收回来,然后在那个缓冲区里面用strstr寻找需要的数据
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 应该是要每个字节轮询一遍的,一个字节一个的进行查询
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的的数据是不是每次都在一样的地址上呢,要是一样,可以直接取偏移地址取出来就可以了,要是不一样,要一进行查询 的方式查找每个字节
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 从第一个开始对比,一至到找到你要的数据为止,如果没有,放丢弃这一帧数据
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个就是字符串中的每个字符比较,因为已经知道要取哪些字符,那就从第一个开始判断,遇到第一个,就接着判断后面的。完全符合就存储起来。
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 你只需要做个循环判断,判断第i位为'2',第i+1位为'6',那就可以了。

    • 发布于2019-03-19
    • 举报
    • 评论 0
    • -1
    • 0

  • 一般单片机收发的数据是字符型,可以使用字符串匹配strstr(),在一段长字符串中找需要的子串。
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • -1
    • 0

相关问题

问题达人换一批

单片机收到一串字符,怎么从这一串字符中只提取需要的内容?