Преобразовать (через запятую шестнадцатеричный) String в массив без знака в Arduino - PullRequest
0 голосов
/ 12 сентября 2018

Ответная нагрузка моего 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.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если использование 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 голосов
/ 12 сентября 2018

Используйте 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
...