Преобразовать (через запятую шестнадцатеричный) String в массив без знака в Arduino

Полезная нагрузка ответа моего http-запроса выглядит следующим образом (но может быть изменена на любую строку, наиболее подходящую для задачи):

"{0X00,0X01,0XC8,0X00,0XC8,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}"

Как мне превратить его в массив без знака, содержащий шестнадцатеричные значения, например:

unsigned char gImage_test[14] = { 0X00,0X01,0XC8,0X00,0XC8,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}

Дополнительная информация: длина строки полезной нагрузки известна заранее и всегда одинакова. Некоторое частичное решение, которое я нашел, не может быть применено напрямую из-за ограничений типа оболочки Arduino для c ++. Ищете простое решение в Arduino IDE.

0

Решение

использование sscanf("%x", ...)Вот пример только 3 шестнадцатеричных чисел:

const char *buffer = "{0X00,0X01,0XC8}";
unsigned int data[3];
int read_count = sscanf(buffer, "{%x,%x,%x}", data, data+1, data+2);
// if successful read_count will be 3
0

Другие решения

При использовании sscanf() (#include <stdio.h>) в пределах ваших ограничений, тогда вы можете позвонить с ним "%hhx" чтобы извлечь каждое отдельное шестнадцатеричное значение в unsigned char как это:

const int PAYLOAD_LENGTH = 14; // Known in advance
unsigned char gImage_test[PAYLOAD_LENGTH];

#include <stdio.h>

int main()
{
const char* bufferPtr = "{0X00,0X01,0XC8,0X00,0XC8,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF}";
for (int i = 0; i < PAYLOAD_LENGTH && sscanf(bufferPtr + 1, "%hhx", &gImage_test[i]); i++, bufferPtr += 5);

return 0;
}
0

По вопросам рекламы [email protected]