String 无法使用ESP-NOW正确发送字符串

String 无法使用ESP-NOW正确发送字符串,string,struct,esp8266,String,Struct,Esp8266,我试图在同一个试验板上从设备1向设备2发送一个字符串(都是Wemos D1 Mini esp8266),但它一直在设备2上给我一个奇怪的响应 我发送的内容: strcpy(myData.a,“这是一个字符”); myData.b=随机(1,20); myData.c=1.2; myData.d=“Halo apa kabar semua”; myData.e=假; 我收到的: 接收字节:56 字符:这是一个字符 内部:7 浮动:1.20 字符串: 我该怎么办?我将此代码用作“”,甚至完全复制了

我试图在同一个试验板上从设备1向设备2发送一个字符串(都是Wemos D1 Mini esp8266),但它一直在设备2上给我一个奇怪的响应

我发送的内容:

strcpy(myData.a,“这是一个字符”);
myData.b=随机(1,20);
myData.c=1.2;
myData.d=“Halo apa kabar semua”;
myData.e=假;
我收到的:

接收字节:56
字符:这是一个字符
内部:7
浮动:1.20
字符串:


我该怎么办?我将此代码用作“”,甚至完全复制了它,但仍然是这样。

用于
myData
struct
是:

typedef struct\u消息{
chara[32];
int b;
浮点数c;
字符串d;
布尔e;
}结构信息;
您给myData.d的不是一个
字符串
对象,而是一个
char[]
,就像给myData.a的

尝试为其提供Arduino版本的
字符串
对象:

String str=“Halo apa kabar semua”;
myData.d=str;

如果不起作用,请向我们显示编译器警告和错误。

用于
myData
struct
是:

typedef struct\u消息{
chara[32];
int b;
浮点数c;
字符串d;
布尔e;
}结构信息;
您给myData.d的不是一个
字符串
对象,而是一个
char[]
,就像给myData.a的

尝试为其提供Arduino版本的
字符串
对象:

String str=“Halo apa kabar semua”;
myData.d=str;

如果这不起作用,请向我们显示编译器警告和错误。

我的提示不太适合这种结构。 但你可以用我的方法 并根据您的需要重做。 主发送字符串如下所示:

  String helloStr = "Hello World";
  uint8_t *buffer = (uint8_t*) helloStr.c_str();
  size_t sizeBuff = sizeof(buffer) * helloStr.length();
  esp_now_send(peer_addr, buffer, sizeBuff);
// callback when data is recv from Master
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
   char* buff = (char*) data;
  String buffStr = String(buff);
  Serial.println(buffStr);
}
从机得到如下字符串:

  String helloStr = "Hello World";
  uint8_t *buffer = (uint8_t*) helloStr.c_str();
  size_t sizeBuff = sizeof(buffer) * helloStr.length();
  esp_now_send(peer_addr, buffer, sizeBuff);
// callback when data is recv from Master
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
   char* buff = (char*) data;
  String buffStr = String(buff);
  Serial.println(buffStr);
}

我的建议不太适合你的结构。 但你可以用我的方法 并根据您的需要重做。 主发送字符串如下所示:

  String helloStr = "Hello World";
  uint8_t *buffer = (uint8_t*) helloStr.c_str();
  size_t sizeBuff = sizeof(buffer) * helloStr.length();
  esp_now_send(peer_addr, buffer, sizeBuff);
// callback when data is recv from Master
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
   char* buff = (char*) data;
  String buffStr = String(buff);
  Serial.println(buffStr);
}
从机得到如下字符串:

  String helloStr = "Hello World";
  uint8_t *buffer = (uint8_t*) helloStr.c_str();
  size_t sizeBuff = sizeof(buffer) * helloStr.length();
  esp_now_send(peer_addr, buffer, sizeBuff);
// callback when data is recv from Master
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
   char* buff = (char*) data;
  String buffStr = String(buff);
  Serial.println(buffStr);
}

试试strcpy(myData.d,“Halo apa kabar semua”);而不是myData.d=“Halo apa kabar semua”;但是strcpy代表char,而不是string。我需要myData.d仍然在string上它对myData.a有效,为什么你认为它对myData.d无效?因为myData.a是char,而myData.d是string。基于引用链接,它确实可以以字符串形式发送数据,但为什么我不能呢?请尝试strcpy(myData.d,“Halo apa kabar semua”);而不是myData.d=“Halo apa kabar semua”;但是strcpy代表char,而不是string。我需要myData.d仍然在string上它对myData.a有效,为什么你认为它对myData.d无效?因为myData.a是char,而myData.d是string。基于引用链接,它确实可以以字符串形式发送数据,但为什么我不能呢?