Перевести последовательность символов в значение HEX

Задача кажется очень простой но непойму как.
В результате будет считываться с файла и отправляться команда в порт, но на данном этапе хочу понять как из строки “1d0047517a” сделать массив {0x1D, 0x00, 0x47, 0x51, 0x7A}?

Сначала надо понять, что за строка, и что за массив. Вариантов масса.
В простейшем случае это одно и тоже и ничего преобразовывать вообще не надо. (если вы в курсе - строка это массив)

Строка будет в файле на SD карте (там будет не одна строка, но с этим потом).

в курсе, но мне надо перевести этот масив из символьного в байты (по два)…, даже незнаю как правильно назвать то что мне нужно.
У меня есть масив {‘1’, ‘d’, ‘0’, ‘0’, ‘4’, ‘7’, ‘5’, ‘1’, ‘7’, ‘a’} мне нужно с него сделать {0x1D, 0x00, 0x47, 0x51, 0x7A}
Так правильнее объяснил?

Не очень. Что это {0x1D, 0x00, 0x47, 0x51, 0x7A}? Текстовая строка или массив байт?

Если строка всегда 10 символов, то так

char s[] = “1d0047517a”;
byte a[5] = {0};
sscanf(s, "%2X%2X%2X%2X%2X", a[0], a[1], a[2], a[3], a[4]);

не пробовал…

массив байт

Спасибо! Я так понимаю это немножко костыль, но работает

char a[] = "1d0047517a";

void setup() {

  Serial.begin(19200);
  byte b[5] = {0};
  sscanf(a, "%2X%2X%2X%2X%2X", &b[0], &b[1], &b[2], &b[3], &b[4]);
  for (int i = 0; i < 5; i++)
    Serial.write(b[i]);
}

image
выводит то что надо

и что, прям “00” печатает вместо просто нуля? :slight_smile:

А в чем костыль тогда?

а можно поподробней про эту команду?

А поискать?

в том что для другого количества надо будет создавать другой шаблон, но для моих потребностей достаточно.

не печатает, а выводит байт “00” в HEX. Скрин с проги которая отображает все что есть в порте в HEX

по простому - удобный парсер, выводит по шаблону из строки в переменные

я к тому, что код из сообщения 7 выведет 0, а не 00

Опять борцуны за права небинарных данных? :slight_smile: