Как объединить часть строки и преобразовать ее в int?

Допустим, у меня есть

String myString="AR0236";

Я хочу извлечь число 236 и присвоить его int. Как это можно сделать?

PS: Я новичок в программировании и пробовал искать на форумах похожие проблемы, но, к моему удивлению, ни одна из них мне не помогла!

, 👍0

Обсуждение

примечание: объединение означает "объединиться".... это противоположно тому, что вы пытаетесь сделать, а именно "разделить", @jsotola

см. https://stackoverflow.com/questions/40538792/remove-first-few-characters-from-a-string?, @MichaelT


1 ответ


Лучший ответ:

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