Преобразование значения Longint в бинарную строку
- Войдите на сайт для отправки комментариев
Ср, 11/03/2020 - 14:35
Здраствуйте.
Пишу функцию для Arduino IDE преобразование значения Longint в бинарную строку, вот она
/ ================================================= } // Преобразование значения Longint в бинарную строку } // Digits кол-во знаков в строке } // Важно! незначащие нули сохраняются } // Пример: 32,9 ='000100000' [9] } // 64,9 ='001000000' [9] } // 128,9='010000000' [9] } // 511,9='111111111' [9] } //===================================================} String InttoStrBin1(long Value, int Digits) { String Result; Result = ""; for (int a = Digits ; a > 0 ; a-- ) { if (Value & (1 << a) != 0 ) { Result = Result + '1'; } else { Result = Result + '0'; } } return Result; }
Эта функция в задумке формирует строку определенной длины. Но она не работает. Не могу найти в чем ошибка?
И как она "не работает"?
Скобки правильно расставь
Расставьте нормально скобки в строке №16 или вообще выбросьте "!= 0" - оно там не нужно. Тогда заработает, но криво - будет съедать нулевой бит, т.к. Вы его почему-то решили не преобразовывать (a никогда у Вас нулю не равно). Если исправите и это, получит то, что хотели.
Не работает так:
511,9 = 111111111 ( верно)
128,9 = 000000000
64,9 = 000000000
Кстати, ответьте. мне чисто психологически интересно. Про эти скобки Вам ведь компилятор, наверняка, говорил. Почему игнорируете? На самом деле все новички так - предупреждения компилятора - побоку, плевать на них. Почему?
Если не работает, выкладывайте скетч. Откуда нам знать, что Вы там наменяли и как именно она у Вас "так" не работает?
Только убедитесь, что Вы прочитали вторую часть моего поста!
Serial.print(a, BIN) не проще?
Serial.print(a, BIN) не проще?
Мне нужна эта переменная в дальнейшем
Serial.print(a, BIN) не проще?
Ему надо количеством символов управлять с незначащими нулями. Понятно, что выбран самый затратный метод, но работать то он должен по-любому.
SyrBrandon, так что, скетч будет или расходимся?
Если не работает, выкладывайте скетч. Откуда нам знать, что Вы там наменяли и как именно она у Вас "так" не работает?
Только убедитесь, что Вы прочитали вторую часть моего поста!
Спасибо за Ваш совет, я его еще не попробовал
А вот ещё на пробу: Digits раз проверяем (Value & 0x01), после каждой проверки сдвигаем Value на один бит вправо.
Кстати, ответьте. мне чисто психологически интересно. Про эти скобки Вам ведь компилятор, наверняка, говорил. Почему игнорируете? На самом деле все новички так - предупреждения компилятора - побоку, плевать на них. Почему?
На счет предупреждения компилятора сейчас посмотрел внизу пишет только это:
Размер скетча в двоичном коде: 5406 байт (из 30720 байт максимум)
Или это где то еще можно посмотреть, у меня Arduino ide 1.0.5
Насчёт "1.0.5" не знаю (и где Вы такую древность взяли?), но в современных версиях, разработчики по умолчанию выключают вывод предупреждений (не знаю зачем), его надо включать - иначе как слепой. Включить можно "Файл|Настройки" а там напротив слов "Сообщения компилятора" выбрать "Все". Это обязательно надо делать - он много полезного говорит.
у меня Arduino ide 1.0.5
И машина времени в гараже? Если что, то сегодня 11 марта 2020года. Не благодари.
Расставьте нормально скобки в строке №16 или вообще выбросьте "!= 0" - оно там не нужно. Тогда заработает, но криво - будет съедать нулевой бит, т.к. Вы его почему-то решили не преобразовывать (a никогда у Вас нулю не равно). Если исправите и это, получит то, что хотели.
Благодарю за совет Все заработало как надо.
Проблема была в скобках и переменная "a" не достигала 0.
Но предупреждения включите по-любому. Это полезно.
Насчёт "1.0.5" не знаю (и где Вы такую древность взяли?), но в современных версиях, разработчики по умолчанию выключают вывод предупреждений (не знаю зачем), его надо включать - иначе как слепой. Включить можно "Файл|Настройки" а там напротив слов "Сообщения компилятора" выбрать "Все". Это обязательно надо делать - он много полезного говорит.
Похоже в этой версии нет такого пункта, тут есть Показывать подробный вывод при компиляции, галочку взвел, повалились сообщения
Но предупреждения включите по-любому. Это полезно.
Благодарю. Действительно там много всего интересного. И про скобки нашел упоминание.