天天看点

如何将字符串转换成数组_Arduino程序设计将字符串转换成数字

1.描述

我们需要将字符串转换为数字,也许是因为通讯链路收到了字符串形式的值,而我们需要把它当做一个整数或者浮点数来用。

2.示例

这个代码片段在遇到任何一个不是数字的字符时(或者缓冲区已满)结束数字输入。要让这个功能起作用,我们需要打开串口监视器的换行选项或者输入一些其他的终止字符。

char strval[6];      //定义数组(必须大到足够保存全部数字)

int index = 0;       //存储所接收的数字的数组索引

void setup()

{

    Serial.begin(9600);

}

void loop()

{

    if(Serial.available()>0)

    {

        char ch = Serial.read();

        if(index 5 && isDigit(ch))

        {

            strval[index++] = ch;        //在字符串里加上ASCII字符

        }

        else 

        {

            //当缓冲区满或遇到第一个非数字

            strval[index] = 0;    //以 0 终止字符串

            int val = atoi(strval);  //使用atoi将字符串转换为int

            index = 0;

            Serial.println(val);     //串口打印转换过后的值

        }

    }

}

3.说明

名称晦涩的atoi(ASCII码到int)和atol(ASCII码到long)函数将字符串转换成整数或者长整数,想要使用它们,必须先要接收并且将整个字符串存储到字符数组,然后才能调用转换函数。上面示例代码创建了名为strval,可容纳多达5位数的字符数组(声明为strval[6],但要为终止空字符留位置),我们用来自Serial.read的数字填充这个数组,直到它遇到不是有效数字的第一个字符。遇到空字符会结束该数组,并且调用atoi函数将字符数组转换成变量val。

此外还有一种方法将String转换成整数:toInt

String number = "1234";

int val = number.toInt();

Arduino 1.0版本添加了parseInt方法,该方法可用于从串口和以太网得到整数值。下面代码片段将数字位组成的序列转换为数字。

if(Serial.available()>0)

{

    val = Serial.parseInt();

}

如果数据在规定的时间间隔内没有到达,像parseInt函数这样的流分析方法使用超时将控制返交回给你的程序,默认的超时时间为1s,但是可以通过调用setTimeout方法来改变:

Serial.setTimeout(1000 * 60);  //等待一分钟

4.实验现象

如何将字符串转换成数组_Arduino程序设计将字符串转换成数字

没有实验硬件的同学可以到下面的小程序购买哟~