Официальный сайт компании Arduino по адресу arduino.cc
Как собрать несколько символов в число?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 11/08/2018 - 10:42
Доброго времени суток!
Существует несколько переменных (a, b, c, d). Каждая из этих переменных может хранить в себе либо 1, либо 0.
Мне необходимо собрать значения всех этих переменных в единое число.
Пример:
(a = 1 / b = 0 / c = 0 / d = 1) => 1001
(a = 0 / b = 0 / c = 0 / d = 0) => 0000
Есть идеи?
Дайте подумать.... а что если умножать каждое на 10^n и складывать?
bitSet();
Как собрать несколько символов в число?
Существует несколько переменных (a, b, c, d). Каждая из этих переменных может хранить в себе либо 1, либо 0.
Вы бы для начала определились, что у Вас в этих переменных, символы '0' и '1' или числа 0 и 1. А то Вы в показаниях путаетесь.
Если Вы не видите разницы между символами и числами (или не знаете, что у Вас там), то ответ - никак, пока не почитаете умных книжек и не научитесь эту разницу видеть.
a, b, c, d = переменные с целочисленным типом данных (int).
Записывается число 0 или 1. Не true/false.
В зависимости от значений этих переменных мне необходимо собирать код, состоящий из 4х цифр. (0000 / 1111 /1001 и др.).
Выдает 256
sadman41, в сумме код большой, поэтому это слишком загромождает код программы в целом. Нужно более простое решение.
bwn, сейчас прочитаю про эту функцию.
Теперь выводит 15
В переменную нужно писать с маской
Ну или можно просто так, но это опасно.
qwone, Efim, вы предлагате для ТС варианты, которые просто слипляют биты, а ему нужно слипить числа. По моему обычным умножением на 1, на 10, на 100, на 1000 и последующим суммированием -самый простой способ :)
Квон, Ефим, Вы чего пишете? Ему же десятичное число 1001 собрать надо, а Вы ему двоичные соибраете.
sadman41 написал нормальное решение. Не понимаю, чем оно не устраивает. Хоттие эффективности, заменяйте умножение на два сдвига (вроде 8+2 по-прежнему 10, Дума же этого не отменила пока).
Efim, умножение , да не то. Вот что надо: a*1 + b*10 +c*100 +d*1000
Я понял вас. Просто для меня десятичное или двоичное число это всего лишь его представление, а считаю в той системе в которой удобно, ведь результат один)
Efim, ну где ж один? Результат разный. Причём я не уверен, что это то, что нужно ТС. Ведь числа с нолём впереди он не получит, остаётся только строку собирать.
Я про то что человеку нужен десятичный ответ, хотя он использует только 1 и 0. Просто для себя вывел бы бинарное значение. А т.к. нужно десятичное то тут вы правы, нужно обычное умножение со сложением.
Прежде всего ТС, надо знать что он хочет, а так же знать основы. А то что я написал это просто "бег на месте" или "бег по кругу". Пользы ему это не принест.
Я про то что человеку нужен десятичный ответ, хотя он использует только 1 и 0. Просто для себя вывел бы бинарное значение.
Так Вы ж получаете другое значение! И от системы это никак не зависит - Вы считаете другое число.
sadman41, в сумме код большой, поэтому это слишком загромождает код программы в целом.
Шта? Перемножить и сложить 4 числа - большой код?
Это большой код? Однако. Правда, нихрена неясно - вам надо четырёхСИМВОЛЬНЫЙ код получить, или число? Потому как, если брать предыдущий пример и все переменные, кроме d, сделать 0 - то на выходе получится ЧИСЛО 1, а не СИМВОЛЬНЫЙ код "0001". Так что вы определитесь, что вам нужно. На всякий - вариант с символьным кодом:
Но всё это изврат, и что-то мне подсказывает, что налицо попытка решить задачу не так, как правильно.
Ну а мозг то зачем было выносить? На Вашу третью строку напустите s.parseInt(), а из первой удалите пробелы и тоже самое.
Весь "скипитр" в том, что
1) я раньше не сталкивался с подобной необходимостью
2) Как я полнял, сей метод для СЕРИАЛ порта, а у меня обычная текстовая переменная, содержащая цифры
Вот из нее-то и надо получить число, цифры в котором совпадали бы с исходными...
2) Как я полнял, сей метод для СЕРИАЛ порта,
Ну, у класса String он же называется toInt - документация читать пробовали?
Не только читать, но и использовать, однако, цифры результата не совпадют с исходными...
никак вы не выполните. Ваши числа слишком длинные. Результат, который вы получаете - 4294967295 - есть максимальное число, которое может хранится в типе Unsigned Long int.
Для того, что преобразовать вашу строку в число - вам придется либо использовать нестандартные для ардуино типы, например uint64_t, либо - что более правильно - разбить строку на части и преобразовывать в 2 числа
Спасибо за подсказку. попробую разбиение...
А что тип unsigned long long запретили?
А что тип unsigned long long запретили?
Так b707 про него и писал, только назвал его uint64_t.
Просто toInt(), который я посоветовал, с ним не работает.
Говорят, что запретили - в нем классов не было...
Говорят, что запретили - в нем классов не было...
А я слышал, что классы вроде были, но некошерные - не от Квона.