将 uint_8 ascii 转换为字符串
convert uint_8 ascii to string
我正在通过 BT.I 从 RaspberryPi 向 ESP32 发送一个字符串,每行得到一个 ascii 值。如何将它转换成一个完整的字符串?我尝试如下,但在 运行 方法 printReceivedMEssage(buffer):
时出现错误
从 'uint8_t {aka unsigned char}' 到 'uint8_t* {aka unsigned char*}' 的无效转换 [-fpermissive]
uint8_t buffer;
void printReceivedMessage(const uint8_t* buf) {
char string_var[100];
size_t bufflen = sizeof(buf);
for (int i = 0; i < bufflen; ++i) {
Serial.println(static_cast<char>(buf[i]));
}
memcpy( string_var, buf, bufflen );
string_var[bufflen] = '[=11=]'; // 'str' is now a string
Serial.print("string_var=");
Serial.println(string_var);
}
void loop()
{
buffer = (char)SerialBT.read();
Serial.println(buffer); // THIS SHOWS AN ASCII VALUES ONE PER LINE
printReceivedMessage(buffer); // ERROR
delay(1000);
}
一个应该修正的错误是不正确的 sizeof()
。代码正在获取指针的大小,在 C 和 C++ 中只是这样做(例如,对于 32 位指针,您将获得值 4),但是 不会 return 指向的任何“内容”的大小。在您的情况下,缓冲区包含 null-terminated 字符串,您可以使用 strlen()
size_t bufflen = strlen(buf);
要消除编译器错误,您需要将字节数组传递给 printReceivedMessage()
。例如:
uint8_t buffer[200];
此外,您可以使用 Serial.println(a_string)
在一次调用中打印缓冲区,但随后您需要使用 .
读取整个字符串
字节数组似乎是一个不必要的中介。只需通过 BT 读取一个字符串,然后打印它,就像我链接到的 post 中那样。
Serial.println(SerialBT.readString());
我正在通过 BT.I 从 RaspberryPi 向 ESP32 发送一个字符串,每行得到一个 ascii 值。如何将它转换成一个完整的字符串?我尝试如下,但在 运行 方法 printReceivedMEssage(buffer):
时出现错误从 'uint8_t {aka unsigned char}' 到 'uint8_t* {aka unsigned char*}' 的无效转换 [-fpermissive]
uint8_t buffer;
void printReceivedMessage(const uint8_t* buf) {
char string_var[100];
size_t bufflen = sizeof(buf);
for (int i = 0; i < bufflen; ++i) {
Serial.println(static_cast<char>(buf[i]));
}
memcpy( string_var, buf, bufflen );
string_var[bufflen] = '[=11=]'; // 'str' is now a string
Serial.print("string_var=");
Serial.println(string_var);
}
void loop()
{
buffer = (char)SerialBT.read();
Serial.println(buffer); // THIS SHOWS AN ASCII VALUES ONE PER LINE
printReceivedMessage(buffer); // ERROR
delay(1000);
}
一个应该修正的错误是不正确的 sizeof()
。代码正在获取指针的大小,在 C 和 C++ 中只是这样做(例如,对于 32 位指针,您将获得值 4),但是 不会 return 指向的任何“内容”的大小。在您的情况下,缓冲区包含 null-terminated 字符串,您可以使用 strlen()
size_t bufflen = strlen(buf);
要消除编译器错误,您需要将字节数组传递给 printReceivedMessage()
。例如:
uint8_t buffer[200];
此外,您可以使用 Serial.println(a_string)
在一次调用中打印缓冲区,但随后您需要使用
字节数组似乎是一个不必要的中介。只需通过 BT 读取一个字符串,然后打印它,就像我链接到的 post 中那样。
Serial.println(SerialBT.readString());