Arduino char/char*/String数据类型转换

Arduino char/char*/String数据类型转换


String转换成char[ ]方法

  1. 先通过.c_str()方法,将string.c_str()数据转成char*,在通过strcpy()函数实现转换
  • char *strcpy(char *dest, const char *src)

参数说明:
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。

  1. 通过for循环,将值一一赋值给char数组:

for (unsigned int i = 0; i < str1.length(); i++) { char3[i] = str1[i]; }

String 转换成 char *

  • .c_str()
  • char*初始化时进行赋值: const char *xch4 = str1.c_str();
  • char*初始化后,再进行赋值:xch3 = (char *)str1.c_str();需要进行强制类型转换才行。

char*转成String

  • 直接使用String():例如:

str2 = String(char1); //char*转String
str3 = char2; //隐式转换

示例代码

需要注意的:Serial.printf()只适用于ESP8266/ESP32等板子,AVR 8位的不支持,像UNO,NANO板子不能使用了,如果想在这些板子上实现格式化打印可以使用LibPrintf库来实现这样的方法。官方参考资料;https://www.arduino.cc/reference/en/libraries/libprintf/

//代码基于VSCOde platformIO 在esp8266板子上测试运行
#include <Arduino.h>

char char1[10] = {'h', 'e', 'l', 'l', 'o', '!'};
char char2[10];
char char3[10];

char *xch1 = (char *)"welcome!"; //char*是一个变量,而右边是常量,常量赋值给变量需要强制类型转换或者使用const修饰变量
//const char* p="hello";
char *xch2;
char *xch3;

String str1 = "world!";
String str2;
String str3;
String *xstr;
void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("test!");
  //------------------char[]的赋值
  strcpy(char2, str1.c_str()); //String转char数组方法一
  Serial.print("char2:");
  Serial.println(char2);
  for (unsigned int i = 0; i < str1.length(); i++)
  {
    char3[i] = str1[i];
  }
  Serial.print("char3:");
  Serial.println(char3);

  //-----------------char *xch的赋值
  xch2 = char1;                //将char数组名赋值给char*,数组名为首元素地址。
  xch3 = (char *)str1.c_str(); //对char*进行赋值的时候,必须进行强制类型转换
  Serial.print("xch3:");
  Serial.println(xch3);
  const char *xch4 = str1.c_str(); //在定义char*变量的同时进行初始化赋值
  Serial.print("xch4:");
  Serial.println(xch4);
  for (unsigned int i = 0; i < strlen(xch4); i++)
  {
    Serial.print(xch4[i]);
  }
  Serial.println();
  //-----------------String str2的赋值
  str2 = String(char1); //char*转String
  Serial.print("str2:");
  Serial.println(str2);
  str3 = char2; //隐式转换
  Serial.print("str3:");
  Serial.println(str3);
  Serial.println(str3.c_str());            //println打印String可加可不加
  Serial.printf("str3= %s", str3.c_str()); //格式化打印String一定要加.c_str()转换
}

void loop()
{
}
  • 串口打印信息
    在这里插入图片描述
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIM800C模块应用Arduino 51单片机 STM32软件例程源码资料合集: 1、Arduino例程 2、51单片机测试源码 3、STM32测试源码 4、Linux 5、PC端 6、Windows 01.STM32 拨打电话 02.STM32 发送短信 03.STM32 短信远程控制开关 04.STM32 TCP通信 GSM GPRS模块和STM32的连接方式.txt 01.STC89C52+SIM800C拨打电话 02.STC89C52+SIM800C发送短信 03.STC89C52+SIM800C接收短信控制开关 04.STC89C52+SIM800C TCP通信 GSM GPRS模块和51单片机接线方式.txt void main() { Uart_Init(); if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success); else errorLog(); delay_ms(10); if (sendCommand("AT+CPIN?\r\n", "READY", 1000, 10) == Success); else errorLog(); delay_ms(10); phone(phoneNumber); //´òµç»° while(1) { } } void phone(char *number) { char send_buf[20] = {0}; memset(send_buf, 0, 20); //Çå¿Õ strcpy(send_buf, "ATD"); strcat(send_buf, number); strcat(send_buf, ";\r\n"); if (sendCommand(send_buf, "OK\r\n", 10000, 10) == Success); else errorLog(); } void errorLog() { while (1) { if (sendCommand("AT\r\n", "OK\r\n", 100, 10) == Success) { soft_reset(); } delay_ms(200); } } void soft_reset(void) //ÖÆÔìÖØÆôÃüÁî { ((void (code *) (void)) 0x0000) (); } unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry) { unsigned char n; CLR_Buf(); for (n = 0; n < Retry; n++) { SendString(Command); //·¢ËÍGPRSÖ¸Áî Time_Cont = 0; while (Time_Cont < Timeout) { delay_ms(100); Time_Cont += 100; if (strstr(Rec_Buf, Response) != NULL) { CLR_Buf(); return Success; } } Time_Cont = 0; } CLR_Buf(); return Failure; } //**************************************************** //MSÑÓʱº¯Êý(12M¾§ÕñϲâÊÔ) //**************************************************** void delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<123;j++); }
fre内网穿透只能穿透http协议,且页面大小限制在1496B以内(MTU,包含header头部) 包含函数如下: begin(char*,char*,char*,uint16,String,String);//设定参数信息,第一个参数是wifi名称,第二个参数是wifi密码,第三个参数是服务器地址,第四个参数是服务器端口,都五个参数是自定义域名密码,第六个参数是域名(多个域名以英文逗号分割) on(String,void);//页面以及回调函数,第一个参数是页面路径,第二个参数是回调函数 header(String,String);//设定header头部信息 sendfile();//发送默认的SPIFFS文件 sendfile(String);//发送指定的SPIFFS文件 send(int,string,string);//发送string,第一个参数是响应代码一般是200,第二个参数是页面类型,第三个参数是需要发送的文本 send(int,string,uint8_t*,size_t);//发送uint8_t数组文件,第一个参数是响应代码一般是200,第二个参数是页面类型,第三个参数是需要发送的uint8_t数组文件,第四个参数是uint8_t数组文件的大小 send(int,string,char*,size_t);//发送char数组文件,第一个参数是响应代码一般是200,第二个参数是页面类型,第三个参数是需要发送的char数组文件,第四个参数是char数组文件的大小 Authenticate(String, String);//判断Auth鉴权信息,第一个参数是用户名,第二个参数是密码 requestAuthentication();//向页面返回鉴权需求,使页面弹出Auth鉴权登录信息 getheader(String);//返回header指定头部信息参数值 arg(String);//返回GET请求参数值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值