Как объединить часть строки и преобразовать ее в int?
Допустим, у меня есть
String myString="AR0236";
Я хочу извлечь число 236 и присвоить его int
. Как это можно сделать?
PS: Я новичок в программировании и пробовал искать на форумах похожие проблемы, но, к моему удивлению, ни одна из них мне не помогла!
@Razib Sarker, 👍0
Обсуждение1 ответ
Лучший ответ:
Есть несколько способов.
Класс String (которого, честно говоря, вам следует избегать) имеет несколько полезных методов:
- подстрока — извлекает часть строки как новая строка
- toInt — преобразовать строку в целое число
Чтобы вы могли объединить их вместе:
int val = myString.substring(3).toInt();
Это простой способ. Возьмите содержимое строки, начиная с четвертого символа (оно начинается с нуля, поэтому 3 – это четвертый символ) и далее, и преобразуйте его в целое число.
Если вы избегаете String, как и должно быть, значит, вы работаете с указателями. Например:
char myString[10]; // Здесь хранятся ваши данные
strcpy(myString, "AR0236"); // Давайте добавим фиктивные данные
int val = atoi(myString + 3);
myString + 3
дает вам новый строковый указатель на местоположение, которое находится на 3 байта дальше в памяти от myString
, что соответствует началу вашего числа. . Затем преобразуйте эту часть строки в целое число.
"Простой" способ потребляет и приводит в беспорядок вашу кучу, поскольку необходимо создать новый объект String и скопировать в него данные. «Лучший» (второй) способ больше не использует память. Он просто преобразует подмножество существующей строки напрямую.
Благодарю за ваш ответ. Первый метод работает, хотя и с небольшой задержкой. Я хочу использовать второй, более эффективный метод, но он не работает, если я передаю переменную во втором аргументе strcpy. Строка, которую я хочу преобразовать, взята из серийного номера, поэтому строка неизвестна. Как бы вы обошли это?, @Razib Sarker
Для начала прочтите сериал как следует. Начните здесь: https://majko.co.uk/blog/reading-serial-arduino, @Majenko
Спасибо! Ваша ссылка была действительно полезной , и моя схема работает так, как задумано :), @Razib Sarker
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
примечание: объединение означает "объединиться".... это противоположно тому, что вы пытаетесь сделать, а именно "разделить", @jsotola
см. https://stackoverflow.com/questions/40538792/remove-first-few-characters-from-a-string?, @MichaelT