将 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());