Arduino字符串相关

字符串转数字 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 时,应根据应用程序的具体需求来决定。

posted @ 2022-12-22 11:22  Dapenson  阅读(6565)  评论(2编辑  收藏  举报