arduino invalid conversion from 'char*' to 'unsigned char*' 如何解决
时间: 2023-12-24 17:06:04 浏览: 184
这个错误提示是因为您在使用 Arduino 的库函数时,传入的参数类型与函数参数所需的类型不匹配导致的。通常情况下,Arduino 的库函数都是使用 unsigned char* 类型的参数来传递数据。
要解决这个问题,可以尝试将您传递的参数类型从 char* 转换为 unsigned char* 类型。可以使用以下两种方法之一:
1. 使用强制类型转换
您可以使用强制类型转换将 char* 类型的参数转换为 unsigned char* 类型,例如:
```c++
char* myString = "Hello";
unsigned char* myData = reinterpret_cast<unsigned char*>(myString);
```
2. 使用 C++ 的 string 类型
如果您的数据是以字符串的形式存储的,也可以使用 C++ 的 string 类型来存储和传递数据。string 类型具有方便的转换函数,可以将 string 转换为 unsigned char* 类型,例如:
```c++
#include <string>
std::string myString = "Hello";
unsigned char* myData = reinterpret_cast<const unsigned char*>(myString.c_str());
```
这样,您就可以将 string 类型的数据传递给 Arduino 的库函数了。
相关问题
end = strchr(buffer, TAIL); // 查找包尾 这行报错 invalid conversion from 'unsigned char*' to 'const char*' [-fpermissive]
非常抱歉,这是因为Arduino中的strchr()函数需要的参数类型是const char*,而我们传入的是unsigned char*类型的指针,因此会出现类型不匹配的错误。为了解决这个问题,可以将unsigned char*类型的指针强制转换为const char*类型,以符合函数的参数类型要求,如下所示:
```c
start = strchr((const char*)buffer, HEAD); // 查找包头
end = strchr((const char*)buffer, TAIL); // 查找包尾
```
在上述代码中,我将buffer数组的指针强制转换为const char*类型,以便在调用strchr()函数时匹配参数类型。这样就可以避免上述报错了。
C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:93:16: note: conversion of argument 1 would be ill-formed: C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:128:18: error: invalid conversion from 'const char*' to 'long long int' [-fpermissive] 128 | Serial.print("%d",sensor[0]); | ^~~~ | | | const char* In file included from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Stream.h:27, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/HardwareSerial.h:32, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:303, from C:\Users\conservator\AppData\Local\Temp\arduino\sketches\304EB848CF381B8A7A8E84D646752A81\sketch\mqttToAliyun.ino.cpp:1: C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:94:16: note: candidate: 'size_t Print::print(long long unsigned int, int)' (near match) 94 | size_t print(unsigned long long, int = DEC); | ^~~~~ C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:94:16: note: conversion of argument 1 would be ill-formed: C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:128:18: error: invalid conversion from 'const char*' to 'long long unsigned int' [-fpermissive] 128 | Serial.print("%d",sensor[0]); | ^~~~ | | | const char* exit status 1 Compilation error: no matching function for call to 'print(const char [3], int&)'
这个错误是因为 `Serial.print()` 函数的参数传递方式不正确。`print()` 函数的第一个参数应该是一个字符串,而你传递了一个格式化字符串。在 Arduino 中,你可以使用 `%d` 来打印整数值,但是在这里你需要使用 `Serial.print()` 函数的两个参数版本来打印传感器值。
以下是修正后的代码示例:
```cpp
Serial.print("Sensor Value: ");
Serial.println(sensor[0]);
```
这样就可以正确打印传感器值了。记得在修改完代码后重新编译和上传到你的硬件设备上。
阅读全文