Официальный сайт компании Arduino по адресу arduino.cc
Разделение числа на отдельные цифры
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 25/01/2016 - 22:31
Возникла необходимость из Serial получать числа. Их отсылает Android приложение по BT. Дальше целое число надо разделить на отдельные цифры и присвоить их переменным для дальнейшей работы. Т.е. на входе "123", на выходе 1, 2, 3. В голову пришел лишь способ через строку и subString. Однако, вместо 1, 2, 3 в переменных var1 .. var3 содержится 1, 0, 2. Откуда берется 0? Пробовал по 1 цифре выделять - всё перебирает отлично. Как только 3 операции выделения подряд - сразу появляется 0. Ниже код.
String incomingString; String tempString; int var1; int var2; int var3; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { incomingString = Serial.readString(); tempString = incomingString.substring(0, 1); var1 = tempString.toInt(); tempString = incomingString.substring(1, 1); var2 = tempString.toInt(); tempString = incomingString.substring(2, 1); var3 = tempString.toInt(); Serial.println(var1); Serial.println(var2); Serial.println(var3); } }
отсылай с блютуфа не стрингом а числом и принимай как число. а потом уже деление с остатком
16 incomingString =
Serial
.readString();
поставь тут
Serial
.println(
incomingString) и посмотри точно ли 123 прилитает или нет17
tempString = incomingString.substring(0, 1);
а потом уже деление с остатком
есть пример? напиши, пожалуйста.
16 incomingString =
Serial
.readString();
поставь тут
Serial
.println(
incomingString) и посмотри точно ли 123 прилитает или нетпервым делом проверил. прилетает именно 123
123 % 10 =3
123 % 100 / 10 =2
123 / 100 = 1
вот
Serial
.readString()
.substring(0, 1)
.toInt()
где откопал .... я этих операторов не знал
можно с помощью массива:
Serial
.readString()
.substring(0, 1)
.toInt()
где откопал .... я этих операторов не знал
https://www.arduino.cc/en/Reference/Serial
Serial
.readString()
.substring(0, 1)
.toInt()
где откопал .... я этих операторов не знал
https://www.arduino.cc/en/Reference/Serial
спасибо
Спасибо! Этот метод помог)
123 % 10 =3
123 % 100 / 10 =2
123 / 100 = 1
вот
А если количество цифр в числе не известно?
А если количество цифр в числе не известно?
Не сообщили. Грустно. Программы не написать никак...
А если количество цифр в числе не известно?
А это интрига :) Сколько же цифр в числе 12345 ? :)
А это интрига :) Сколько же цифр в числе 12345 ? :)
Для числа 12345 этот способ не подходит. Как и для другого нетрёхзначного числа. Есть какой-то универсальный алгоритм для любых чисел (в разумных пределах)?
Во первых читаем про atoi(), во вторых учитываем то, что string это массив char.
Т.е. к любому члену массива мы можем обратиться по его индексу и конвертировать его значение в число.
Есть какой-то универсальный алгоритм для любых чисел (в разумных пределах)?
начинать обрабатывать с младших разрядов, остаток от деления на 10 - сохранить в выводную строку, делим на 10 и опять смотрим остаток и сохраняем и т д... Потом строку вывести в обратном порядке
инать обрабатывать с младших разрядов, остаток от деления на 10 - сохранить в выводную строку, делим на 10 и опять смотрим остаток и сохраняем и т д... Потом строку вывести в обратном порядке
Ну я так и сделал. Думал, вдруг есть что пофеншуйнее/красивее.
Спасибо за наводку. Буду курить матчасть.
Спасибо за наводку. Буду курить матчасть.
Можно даже так:
Можно даже так:
Если честно - не понял. :/
Можно даже так:
Если честно - не понял. :/
Если посмотреть таблицу символов ASCII то можно увидеть что числа начинаются с номера 48.
В качестве альтернативы:
Serial.print(x-'0');
Так понятнее ?
Если честно - не понял. :/
Какую строчку? их тут всего три...
Может стоит что-то почитать на тему, что такое коды символов и какие они в таблице ASCII
Если посмотреть таблицу символов ASCII то можно увидеть что числа начинаются с номера 48. В качестве альтернативы: Serial.print(x-'0'); Так понятнее ?
Да, спасибо.