Преобразование строки в const unsigned char

String abc ="0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff";

const unsigned char displaydata={reinterpret_cast<const unsigned char*>(abc.c_str())};

display.drawBitmap(displaydata, startX, startY, bmpWidth, bmpHeight, GxEPD_WHITE);

Получить ошибку: недопустимое преобразование из 'const unsigned char' в 'unsigned char' [-fpermissive]*

Когда я пишу вот так

String abc ="0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff";

display.drawBitmap(reinterpret_cast<const unsigned char*>(abc.c_str()), startX, startY, bmpWidth, bmpHeight, GxEPD_WHITE);

Нет ошибки, но черный экран без изображения на дисплее

Когда я пишу вот так

const unsigned char displaydata[]={ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

display.drawBitmap(displaydata, startX, startY, bmpWidth, bmpHeight, GxEPD_WHITE);

Это работает

Строковые данные, поступающие с сервера, возвращаются ко мне в виде перемешивания, я пытаюсь отразить их на экране. Я хочу преобразовать строковые данные в unsigned char с кодом

Поэтому я пытаюсь обратить

, 👍0

Обсуждение

Как именно сервер предоставляет вам двоичные данные? Пожалуйста, укажите пример строки из ответа сервера на запрос. Это действительно в формате вашей первой строки?, @chrisl

С помощью const unsigned char displaydata={reinterpret_cast<const unsigned char*>(... вы назначаете указатель на один символ. Или, что более важно, *часть* указателя на символ, который, если бы адрес памяти (значение указателя) был больше 0xFF, был бы довольно бесполезен. Итак, проблемы начинаются здесь с отсутствующего декларатора указателя (a*). В этом вопросе не так уж много Arduino. Довольно прямо вопрос C++, если только я чего-то не упускаю., @timemage

String - это пользовательский класс Arduino, поэтому он может быть классифицирован как вопрос arduino (каламбур) по этому достоинству., @Majenko

Шаг первый: Разделите строку на куски, используя разделитель запятой. Шаг Б: преобразуйте каждый фрагмент из его текстового представления в числовое значение. Шаг Дельта: поместите это значение в массив. Шаг 0: забудьте "const", это не имеет значения., @Majenko

@Majenko, я не чувствовал себя достаточно сильно по этому поводу, чтобы закрыть голосование., @timemage


1 ответ


1

Эта строка буквально состоит из символов 0xff ... в то время как массив-это байты 0xff...

Если строка содержит 4 байта,чтобы сказать 0,x,f, f (за которыми следуют запятая и пробел), массив будет иметь 1 байт 255 (и не нужно разделять запятую или пробел).

Если вы хотите преобразовать текстовую шестнадцатеричную строку в байты, посмотрите комбинацию Способов преобразования шестнадцатеричной строки в массив байтов? и петляла по веревочке.

,