Преобразование из `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 }?
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, ",");
}
,
@Juraj
const char* root_0_Title
вызывает ошибку char * strtok ( char * str, const char * delimiters );
, @Just doin Gods work
удалить const
из const char* root_0_Title;
, @Juraj
Смотрите также:
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
- Как получить тип данных переменной?
- Преобразование в Unix Timestamp и обратно
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
почти тот же вопрос на 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