Полезная нагрузка ответа моего 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.
использование 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
При использовании 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;
}