Преобразование из `const char* datac="0x21,0x10,0xfa,0x7a,0xff";` в `uint8_t datat[]={0x21, 0x10, 0xfa, 0x7a, 0xff}`

Приведенные ниже данные чтения из API:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* ssid = "****";
const char* pass = "****";

void setup()
{
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  Serial.print("COnnecting");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.print("\nIP Address");
  Serial.println(WiFi.localIP());
}

void loop() {
  const char* root_0_id ;
  const char* root_0_Title ;
  if (WiFi.status() == WL_CONNECTED)
  {
    long rnd = random(1, 3);
    HTTPClient client;

    client.begin("https://6336d6c365d1e8ef267481aa.mockapi.io/api/bitmap/images?id=1");
    int httpCode = client.GET();

    if (httpCode > 0) {
      String payload = client.getString();
      Serial.println("\nstatuscode: " + String(httpCode));
      if (payload == "[]")
        Serial.println("\nNOT FOUND");
      else
      {

        DynamicJsonDocument doc(49152);
        DeserializationError error = deserializeJson(doc, payload);
        if (error) {
          Serial.print("deserializeJson() failed: ");
          Serial.println(error.c_str());
          return;
        }

        root_0_id = doc[0]["id"]; // "41"
        root_0_Title = doc[0]["Bitmap"];

        Serial.print("\n\nData : ");
        Serial.println(root_0_Title);

        Serial.println(sizeof(root_0_Title));
        client.end();
        dataReceived = 1;
        delay(10000);
        
      }

    }
    else {
      Serial.println("Error on HTTP request");
    }
  }
}

Мне нужна помощь в разборе const char* root_0_Title="0x21,0x10,0xfa,0x7a,0xff" на uint8_t[5]={0x21, 0x10, 0xfa, 0x7a, 0xff }?

, 👍0

Обсуждение

почти тот же вопрос на SO с ответом с использованием стандартной библиотеки https://stackoverflow.com/questions/73969744/how-to-convert-const-char-root-0-title-0x21-0x32-i-0x0f-0x00-to -uint8-тд, @Juraj

@Juraj Я пробовал это, но я думал, что это, вероятно, C, а не Arduino C, поэтому он не компилируется для ESP32. Кроме того, это немного более высокий уровень для меня, чтобы вносить изменения. Я хотел знать перспективу ESP32. Но если вы говорите, что он должен работать и с ESP32? я удалю этот вопрос, @Just doin Gods work


1 ответ


Лучший ответ:

1

вы можете использовать strtok (строковый токенизатор) и strtol (длинная строка) C-функции.

  int count = 0;
  uint8_t bytes[MAX_SIZE]; 
  char* tok = strtok(root_0_Title, ",");
  while (tok != NULL) {
    bytes[count++] = strtol(tok, NULL, 16);
    tok = strtok(NULL, ","); 
  }
,

const char* root_0_Title вызывает ошибку char * strtok ( char * str, const char * delimiters );, @Just doin Gods work

удалить const из const char* root_0_Title;, @Juraj