关闭

ESP8266-从字符串中提取数值的函数

标签: ESP8266
1821人阅读 评论(0) 收藏 举报
分类:

由于工作需要,通过WiFi给ESP8266传送字符串数据时,需要提取字符串里面的数值。

比如字符串:"N000000:550,550,550,550,550,1660,550,550,",需要把N000000后面那些数值用一个整型数组存储起来,特此写了以下函数。


宏定义GETDATA_DEBUG是用来打印信息调试用的。

下面函数的具体功能是给string传递一个字符串的首地址(例如:"550,550,550,550,550,1660,550,550,"),给strip传递分隔符(例如英文逗号:‘,'),给resData传递一个数组首地址,resLength是数组长度。执行完毕后,数值就保存到该数组了。


/*
 * 功能:从字符串中提取整型值
 * 参数:
 * 		string:字符串
 * 		strip:分隔符
 * 		resData[]:数据结果
 * 		resLength:resData的数组长度
 */
#define GETDATA_DEBUG	0
bool ICACHE_FLASH_ATTR
getDataFromString(const char *string,const u8 strip, u16 resData[], u16 resLength)
{
	const char *data = string;
	const char *tempStrStart = NULL;
	const char *tempStrEnd = NULL;
	char tempArray[8] = {0};
	u8 tempStrLen = 0;
	u16 tempValue = 0;
	u8 i = 0;
#if GETDATA_DEBUG
	os_printf("\n");
	os_printf("resData Size:%d\n",resLength);
#endif

	do{
#if GETDATA_DEBUG
		os_printf("data:%s\n",data);
#endif
		tempStrStart = data;
		tempStrEnd = os_strchr(tempStrStart, strip);
		if(tempStrEnd == NULL){
			//os_printf("tempStrEnd is NULL!\n");
			break;
		}
		tempStrLen = tempStrEnd - tempStrStart;
		os_strncpy(tempArray, tempStrStart, tempStrLen);
		tempValue = atoi(tempArray);

#if GETDATA_DEBUG
		os_printf("tempStrLen:%d\n",tempStrLen);
		os_printf("tempArray:%s\n", tempArray);
		os_printf("tempValue:%d\n", tempValue);
#endif

		if(i<resLength){
			resData[i] = tempValue;

		}else{
			os_printf("resData is full!\n");
			return false;;
		}

		tempValue = 0;
		os_memset(tempArray, 0, 8);
		data += tempStrLen+1;		//+1跳过逗号
		i++;

	}while(data != NULL || tempValue != 0);

	return true;
}
#undef GETDATA_DEBUG


使用示例:

u16 checkData[16] = {0};
char *data = "550,550,550,550,550,1660,550,550,";
getDataFromString(data, ',', checkData, sizeof(checkData)/sizeof(u16));
os_printf("checkData:%d,%d,%d,%d,%d,%d,%d,%d,\n",
	checkData[0],checkData[1],checkData[2],checkData[3],
	checkData[4],checkData[5],checkData[6],checkData[7]);

该函数修改后可以移植到其他地方。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ESP8266-WIFI之例程篇

1、ESP8266_drive驱动类文件1)esp8266_drive.h#ifndef _esp8266_drive_H #define _esp8266_drive_H#include "system.h" #include <stdio.h> #include ...
  • IT_BOY__
  • IT_BOY__
  • 2017-05-14 14:31
  • 2171

关于ESP8266使用总结

2016/1/20 首先,该模块使用了AT指令进行操作,我们要做的,就是将需要的AT指令,以字符串的形式发给模块,即可实现相应的功能。 1.      wifi模块ESP8266的默认波特率是115200,但是单片机不能达到那么快的传输...
  • hello_world12138
  • hello_world12138
  • 2016-01-27 15:32
  • 8444

java字符串处理常用函数(数字型和字符串转换,字符串拆分、查找、截取)

一、   String类下的split方法,可以按照指定的定界字符串,对某一字符串进行分割,将待分割字符串中参考字符串前后的字符串提取出来,作为返回值。返回类型为String中,维度由分割完成的结果决定,但内容中会直接去掉定界字符串。   定界字符串查找不到时返回结果为该字...
  • u011630575
  • u011630575
  • 2017-04-09 16:00
  • 709

SQL之提取一个字符串的数字

一、各种函数介绍 1、patindex函数,反回所查内容在字符串中第一次出现的索引 二、封装方法
  • sbyygyrgw555
  • sbyygyrgw555
  • 2013-12-05 09:39
  • 2847

详解Mysql中的JSON系列操作函数

详解Mysql中的JSON系列操作函数 前言 JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。 JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要...
  • u011314442
  • u011314442
  • 2017-12-27 23:13
  • 87

MySQL中的数值函数

本文我们来介绍MySQL中常用的数值符号和函数。 + 加号: mysql> SELECT 3+5; -> 8 - 减号: mysql> SELECT 3-5; -> -2 ...
  • qq_28219759
  • qq_28219759
  • 2016-11-02 09:12
  • 826

将字符串中的数字提取出来 NSScanner

今天在做数据解析的时候碰到一个问题,就是“1间”,“1张”等等,针对这样的问题,我在网上着了一下,找到了,原来iOS中自带有方法,就是扫瞄器(NSScanner),下面是解决方案: NSString *str = @"98741235你好"; NSScanner *scanne...
  • mdk132
  • mdk132
  • 2013-12-23 18:37
  • 1862

java——字符串中数据提取

由于这部分代码是从项目中提取出来的,所以不做完整
  • u013470102
  • u013470102
  • 2014-11-04 15:18
  • 1093

提取字符串中的数字-指针版本-(C语言描述)

从任意字符串中,提取它所包含的数字(整数)部分。
  • kangjianwei101
  • kangjianwei101
  • 2015-12-20 01:46
  • 1955

MySQL数字函数

SQL数字函数主要用于数字处理和/或数学计算。下表详细介绍了数字功能: 名字 描述 ABS() 返回数值表达式的绝对值。 ACOS() 返回的数值表达式的反余弦值。如果该值不在范围-1到1,返回NULL。 ASIN() 返回数值表达式的反正弦。如果值的范围不是在-...
  • wangnan9279
  • wangnan9279
  • 2017-01-23 17:35
  • 375
    个人资料
    • 访问:454099次
    • 积分:5843
    • 等级:
    • 排名:第5143名
    • 原创:157篇
    • 转载:21篇
    • 译文:2篇
    • 评论:283条