преобразовать строку, представляющую двоичное число, в двоичное

У меня есть последовательный вход "1111111" и я хотел бы преобразовать это в двоичный файл B1111111, который я могу отправить в светодиодную матрицу.

Я пытался выполнить поиск, но все результаты вводили в заблуждение, что приводило к преобразованию полного текста в двоичный код. Пожалуйста, сообщите.

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

LedControl mat = LedControl(DIN_PIN, CLK_PIN, CS_PIN, MAX_SEG); // MAX7219
void OneLine() {

//вход
char text[] = "11111110";
//конвертируем в двоичное число каким-то образом


//показываем одну строку
      mat.setRow(0, 0, convertednr);
}

, 👍-1

Обсуждение

«Я пытался выполнить поиск, но все результаты вводили в заблуждение». Как насчет того, чтобы начать с понимания [ASCII](https://en.wikipedia.org/wiki/ASCII)? ASCII «1», отображаемый на вашем последовательном мониторе, имеет двоичный код 0x31, двоичное значение 1 — это ASCII «1» — «0» (0x31 — 0x30)., @hcheung

Вы искали что-то вроде «двоичного кода C++ в int»? Существует функция strtoi(), которая также принимает параметр с используемой системой счисления (2 для двоичного кода). Пожалуйста, попробуйте, @chrisl

зачем вам конвертировать в двоичный? ... что вы будете делать с двоичным числом?, @jsotola

Я получаю это как последовательный ввод и хотел бы отправить его на ряд светодиодных дисплеев 8x8 (max7219)., @vilmarci

зачем вам для этого двоичное число?, @jsotola

Добро пожаловать в SE/Arduino! Пожалуйста, посетите [тур], чтобы узнать, как работает этот сайт, и прочитайте «[спросить]». Затем вернитесь и [отредактируйте] свой вопрос, добавив хотя бы один пример того, что вы пробовали., @the busybee

@jsotola добавил пример кода., @vilmarci

@chrisl: strtoi() не является стандартным. Ему следует использовать [strtol()](https://man7.org/linux/man-pages/man3/strtol.3.html)., @Edgar Bonet

@EdgarBonet Спасибо, это сработало, и мне не нужно дополнительно конвертировать этот двоичный файл, светодиодный элемент управления может с этим работать., @vilmarci

Является ли ваше изменение решением? Если да, то удалите его из вопроса и напишите правильный ответ. Вы можете пометить его (позже) как принятый, если он вам больше подходит. Именно так работает этот сайт вопросов и ответов, это не форум. -- Если это не решение, [отредактируйте] и объясните, почему., @the busybee

@thebusybee решение было в комментарии EdgarBonet: преобразовать в целое число, тогда я смогу передать это в светодиодную матрицу без дальнейшего преобразования., @vilmarci

@vilmarci Как уже упоминал busybee, вам не следует менять исходное сообщение, чтобы оно было правильным. Это сбило с толку будущих читателей этого поста, и они не могут понять, в чем проблема. Вам следует либо опубликовать свой рабочий код в качестве ответа, либо просто оставить его «как есть»., @hcheung


1 ответ


1

Как отметил @EdgarBonet, я могу преобразовать строку в двоичное число с помощью strtoul() и передать ее в свой светодиодный элемент управления. Добавляю это в качестве ответа для будущих читателей:

 LedControl mat = LedControl(DIN_PIN, CLK_PIN, CS_PIN, MAX_SEG); // MAX7219
void OneLine() {

//вход
char text[] = "11111110";
//конвертируем в число
uint32_t convertednr = strtoul(text, NULL, 2);
//распечатать
mySerial.println(convertednr);

//показываем одну строку
      mat.setRow(0, 0, convertednr);
,

вы можете использовать mySerial.println(convertednr, BIN);, @Juraj

По поводу «_Я могу преобразовать строку в десятичное число_»: обратите внимание, что strtoul() преобразует строку в **двоичное** (не _десятичное_) число, и именно это использует элемент управления светодиодом (convertednr — это двоичное число). Вас может смутить тот факт, что mySerial.println(convertednr) преобразует это двоичное число в десятичное строковое представление с целью его отображения на последовательном порту., @Edgar Bonet

спасибо @EdgarBonet, исправил текст, @vilmarci