首页 > 其他分享 >Arduino字符串相关

Arduino字符串相关

时间:2022-12-22 11:35:01浏览次数:38  
标签:const String Arduino char str 字符串 相关

字符串转数字 String To Int

可以使用 atoi 函数将字符串转换为整数。例如:

String str = "12345";
int num = atoi(str.c_str());  // num 的值为 12345

另外,也可以使用 sscanf 函数将字符串转换为指定类型的数字。例如:

String str = "123.45";
float num;
sscanf(str.c_str(), "%f", &num);  // num 的值为 123.45

数字转字符串 IntTo String

可以使用 sprintf 函数将数字转换为字符串。例如:

int num = 12345;
char str[10];
sprintf(str, "%d", num);  // str 的值为 "12345"

另外,也可以使用 String 类的构造函数将数字转换为字符串。例如:

int num = 12345;
String str = String(num);  // str 的值为 "12345"

常见函数整理

String::format()

String::format() 函数是 Arduino 库中的一个静态函数,可以将指定的数据格式化为字符串,并返回一个 String 类型的字符串。

使用方法如下:

String str = String::format(format, arg1, arg2, ...);

其中,format 是一个字符串,用于指定输出格式。arg1arg2 等参数是要输出的数据,可以是各种数据类型,如整型、浮点型、字符串等。

format 字符串中可以使用占位符来指定输出格式。常用的占位符有:

  • %d:输出整型数值。

  • %u:输出无符号整型数值。

  • %ld:输出长整型数值。

  • %lu:输出无符号长整型数值。

  • %x:输出十六进制整型数值。

  • %X:输出十六进制整型数值(大写字母)。

  • %o:输出八进制整型数值。

  • %c:输出字符。

  • %s:输出字符串。

  • %f:输出浮点型数值。

  • %e:输出浮点型数值(科学计数法)。

  • %E:输出浮点型数值(科学计数法,大写字母)。

    例如,下面的代码演示了如何使用 String::format() 函数将数据格式化为字符串:

    int num1 = 123;
    float num2 = 3.14;
    const char* str = "Hello, Arduino!";
    
    String str1 = String::format("num1 = %d, num2 = %.2f, str = %s", num1, num2, str);
    
    // 输出字符串:num1 = 123, num2 = 3.14, str = Hello, Arduino!
    

    在使用 String::format() 函数时,需要注意一些细节,以免出现编译错误或运行错误。

    如果需要对输出的数据进行更精细的控制,可以在占位符后加上修饰符。例如:

  • %4d:输出整型数值,最少输出 4 位(不足补空格)

  • %04d:输出整型数值,最少输出 4 位(不足补 0)

  • %.2f:输出浮点型数值,保留 2 位小数

  • %6.2f:输出浮点型数值,最少输出 6 位(不足补空格),保留 2 位小数

  • %06.2f:输出浮点型数值,最少输出 6 位(不足补 0),保留 2 位小数

例如,下面的代码演示了如何使用 String::format() 函数和修饰符对输出的数据进行精细控制:

int num1 = 123;
float num2 = 3.14;

String str1 = String::format("num1 = %4d, num2 = %6.2f", num1, num2);
// 输出字符串:num1 =  123, num2 =   3.14

String str2 = String::format("num1 = %04d, num2 = %06.2f", num1, num2);
// 输出字符串:num1 = 0123, num2 = 003.14

希望以上内容能够帮助您了解 String::format() 函数的使用方法。

String.c_str()

String 类的 c_str() 函数可以将 String 对象转换为 const char* 类型。例如:

String str = "Hello, World!";
const char* cstr = str.c_str();  // cstr 的值为 "Hello, World!"

strcpy

strcpy 函数可以将一个字符串的内容复制到另一个字符串中。例如:

char str1[10] = "Hello";
char str2[10];
strcpy(str2, str1);  // str2 的值为 "Hello"

sprintf

sprintf 函数可以将一个数字转换为字符串并存储在指定的字符数组中。例如:

int num = 12345;
char str[10];
sprintf(str, "%d", num);  // str 的值为 "12345"

char*const char* 和 string 三者转换

const char*string 的转换

在 Arduino 中,可以使用 const char*String 两种类型来表示字符串。其中,const char* 是 C 语言中的字符串类型,表示一个字符数组的首地址;而 String 是 Arduino 库中自带的字符串类,可以像操作其他类型一样来操作字符串。

下面介绍如何在 Arduino 中实现 const char*String 之间的相互转换。

const char*String

在 Arduino 中,可以使用 String 类的构造函数来将 const char* 转换为 String 类型。

例如,下面的代码演示了如何将一个 const char* 类型的字符串转换为 String 类型:

const char* str1 = "Hello, Arduino!";
String str2 = String(str1);

这样,变量 str2 就是一个 String 类型的字符串,值为 "Hello, Arduino!"。

也可以使用 String 类的静态函数 String::format() 来将 const char* 转换为 String 类型。

例如,下面的代码演示了如何使用 String::format() 函数将一个数字转换为字符串:

int num1 = 123;
float num2 = 3.14;
const char* str = "Hello, Arduino!";

String str1 = String::format("num1 = %d, num2 = %.2f, str = %s", num1, num2, str);

// 输出字符串:num1 = 123, num2 = 3.14, str = Hello, Arduino!

使用这两种方式,可以在 Arduino 中方便地将 const char* 类型转换为 String 类型。

另外,还可以使用 + 运算符或 += 运算符将 String 类型和 const char* 类型进行连接。例如:

String str1 = "Hello, ";
const char* str2 = "Arduino!";
str1 += str2; // str1 变量的值变为 "Hello, Arduino!"

这样,就可以在 Arduino 中方便地使用 String 类型和 const char* 类型进行字符串操作。

Stringconst char*

在 Arduino 中,可以使用 String 类的成员函数 c_str() 来将 String 类型转换为 `const char*类型。

例如,下面的代码演示了如何将一个 String 类型的字符串转换为 const char* 类型:

String str1 = "Hello, Arduino!";
const char* str2 = str1.c_str();

这样,变量 str2 就是一个 const char* 类型的字符串,值为 "Hello, Arduino!"。

注意,使用 c_str() 函数获取的 const char* 类型的字符串是临时生成的,不能直接修改。如果要修改字符串的值,可以使用 String 类的修改函数,或者将 const char* 转换为 char* 类型再修改。

例如,下面的代码演示了如何将 const char* 转换为 char* 类型再修改字符串的值:

String str1 = "Hello, Arduino!";
char* str2 = const_cast<char*>(str1.c_str());
str2[0] = 'H'; // 修改字符串的第一个字符

这样,变量 str2 就是一个 char* 类型的字符串,值为 "Hello, Arduino!"。

总结一下,在 Arduino 中可以使用 String 类的构造函数或 String::format() 函数将 const char* 转换为 String 类型,使用 String 类的 c_str() 函数将 String 类型转换为 const char* 类型。

在使用这些函数时,需要注意一些细节,以免出现编译错误或运行错误。

char*const char* 的转换

在 Arduino 中,char*const char* 是两种不同的字符串类型。

char* 是一种可变字符串类型,它表示一个指向字符数组的指针。这种字符串可以被修改,比如可以使用 strcpy 函数将一个新的字符串复制到该字符串中。

const char* 是一种不可变字符串类型,它表示一个指向常量字符数组的指针。这种字符串不能被修改,因为它是常量。

const char*char*

如果要将 const char* 类型转换为 char* 类型,可以使用 const_cast 函数,如下所示:

void setup() {
  // 定义一个 const char* 类型的字符串
  const char* str = "Hello, World!";

  // 将 const char* 类型转换为 char* 类型
  char* p = const_cast<char*>(str);

  // 输出字符串
  Serial.println(str);
  Serial.println(p);
}

void loop() {
  // 这里是空的
}

char*const char*

如果要将 char* 类型转换为 const char* 类型,可以直接将 char* 类型赋值给 const char* 类型的变量,如下所示:

void setup() {
  // 定义一个 char* 类型的字符串
  char str[] = "Hello, World!";

  // 将 char* 类型转换为 const char* 类型
  const char* p = str;

  // 输出字符串
  Serial.println(str);
  Serial.println(p);
}

void loop() {
  // 这里是空的
}

需要注意的是,在上面的例子中,虽然 p 是一个 const char* 类型的变量,但它仍然指向的是可变字符串 str。所以,如果你尝试修改 p 指向的字符串,程序仍然会崩溃。要真正地将一个可变字符串转换为不可变字符串,可以使用 strcpy_P 函数将字符串复制到一个常量区间中,如下所示:

void setup() {
  // 定义一个 char* 类型的字符串
  char str[] = "Hello, World!";

  // 将字符串复制到常量区间
  char buf[13];
  strcpy_P(buf, str);

  // 定义一个 const char* 类型的字符串
  const char* p = buf;

  // 输出字符串
  Serial.println(str);
  Serial.println(p);
}

void loop() {
  // 这里是空的
}

在上面的例子中,我们使用 strcpy_P 函数将字符串 str 复制到常量区间 buf 中,然后将 buf 赋值给 const char* 类型的变量 p。这样,就可以将一个可变字符串转换为不可变字符串了。

总的来说,在 Arduino 中,char*const char* 是两种常用的字符串类型,你可以根据需要使用它们来表示字符串。如果需要进行类型转换,可以使用 const_cast 函数或 String 类的 c_str() 函数进行转换。

char*string 的转换

在 Arduino 中,char* 类型表示字符串的指针,而 string 类型则表示字符串对象。这两种类型可以相互转换。

以下是在 Arduino 中将 char* 转换为 string 的方法:

char* str = "Hello, world!";
String stringObject = String(str);

或者

char* str = "Hello, world!";
String stringObject = str;

要将 string 转换为 char*,可以使用 string 对象的 c_str() 方法:

String stringObject = "Hello, world!";
char* str = stringObject.c_str();

请注意,将 string 转换为 char* 后,不应该对指针所指向的字符串进行修改,因为这可能导致未定义的行为。

此外,请注意在 Arduino 中使用字符串指针时应该始终使用 const char*,以避免意外修改字符串。例如:

const char* str = "Hello, world!";

这样可以确保字符串不会被意外修改,从而避免出现错误。

当然,还有其他的方法可以在 Arduino 中实现 char*string 之间的相互转换。例如,可以使用 strcpy() 函数将 string 转换为 char*

String stringObject = "Hello, world!";
char str[stringObject.length() + 1];
strcpy(str, stringObject.c_str());

要将 char* 转换为 string,可以使用 string 类的构造函数:

char* str = "Hello, world!";
String stringObject(str);

或者可以使用 string 类的 assign() 方法:

char* str = "Hello, world!";
String stringObject;
stringObject.assign(str);

除了使用字符串指针和字符串对象之间的转换,还可以使用 Arduino 的内置函数 toCharArray()string 转换为字符数组(char[])。

举个例子:

String stringObject = "Hello, world!";
char charArray[stringObject.length() + 1];
stringObject.toCharArray(charArray, sizeof(charArray));

要将字符数组(char[])转换为 string,可以使用 string 类的构造函数:

char charArray[] = "Hello, world!";
String stringObject(charArray);

或者可以使用 string 类的 assign() 方法:

char charArray[] = "Hello, world!";
String stringObject;
stringObject.assign(charArray);

实际上,选择哪种方法来转换 char*string 在很大程度上取决于你的应用程序需求。

如果你需要修改字符串,那么最好使用字符数组(char[]),因为它们是可以更改的。如果你不需要修改字符串,则可以使用 const char* 类型。

对于 string 类型,它是可以更改的,并且提供了许多方便的操作函数,因此可以更轻松地操作字符串。但是,它相对于其他类型消耗的内存空间可能会更多一些。

因此,在选择如何转换 char*string 时,应根据应用程序的具体需求来决定。

标签:const,String,Arduino,char,str,字符串,相关
From: https://www.cnblogs.com/dapenson/p/16998008.html

相关文章

  • 字符串 记录2
    http://ybt.ssoier.cn:8088/problem_show.php?pid=1471字典树板子 http://ybt.ssoier.cn:8088/problem_show.php?pid=1472"异或",都每个数,在树上每次贪心地走相反地路......
  • R7-3 十六进制字符串转换成十进制非负整数
    R7-3十六进制字符串转换成十进制非负整数分数 15全屏浏览题目切换布局作者 颜晖单位 浙大城市学院输入一个以#结束的字符串,滤去所有的非......
  • js字符串换行
    字符串换行方式一:\n换行<divstyles={{whiteSpace:'pre-wrap'}}>{"1\n2}</div>输出结果:12方式二:模板字符串换行<divstyle={{whiteSp......
  • Python 字符串
    目录Python字符串字符串基本特点字符串的编码引号创建字符串空字符串和len()函数转义字符字符串拼接不换行打印inputstr()实现数字转型字符串使用[]提取字符replace()实......
  • 如何用python判断字符串包含多个字符串中的一个或多个?
    https://blog.csdn.net/weixin_42445362/article/details/109819677p="Tomisaboy,Lucyisagirl,TomlikemathandLucylikeenglish!"keywordslist=["englis......
  • R7-1 判断回文字符串
    R7-1判断回文字符串分数 15全屏浏览题目切换布局作者 颜晖-历年试卷单位 浙大城市学院输入一个字符串,判断该字符串是否为回文。回文就是......
  • Json字符串,JsonObject,Java对象相互转换
    Json字符串,JsonObject,Java对象相互转换1、Java对象类 publicclassUser{privateStringname;privateIntegerage;publicUser(){}publicUse......
  • 某地区共享电动车的相关分析报告
    某地区共享电动汽车交易量使用情况摘要随着人口的快速增长和经济科技的高速发展,汽车的发展水平也是水涨船高,共享电动汽车最近几年也开始变得流行起来。共享电动汽车的发......
  • MEGAN V2.10 的pgf90编译器安装以及相关问题解决
    这里列出了一些MEGAN安装中可能遇到的一些问题,分享出我自己的一些解决方法。pgf90编译器的下载:目前PGI已经被整合到NVIDA官方cuda,所以只能直接下载整个到linux中:https:/......
  • Python学习笔记--文件的相关操作
    文件的读取操作读操作实现:read()--读完read(10)--读取10个字节readline()--将所有行并到一行输出readlines()--一次读取一行文件的关闭:实现:上面的这种用法,使用完成......