В программировании бывает нужно превратить символы цифр в полноценное число. К примеру, мне понадобилось считать файл такой структуры: «15, 58, 88, 95, ….». Как же преобразовать их? int() — нет! В стандартных библиотеках C++ есть замечательная функция — atoi(). Она преобразовывает строку цифр-символов в число. Вот пример:
1 2 3 4 5 6 7 8 | //.... char str[4]; str[0]='1'; str[1]='5'; //Вот наши числа str[2]='\0' //Символ окончания строки int number = 0; //Число типа - инт number = atoi(str); //Преобразовываем строку в число //..... |
«\0» — Обязательный символ, он указывает на окончание строки. atoi() — преобразовывает числа диапазона Int, но есть ее аналоги для более больших чисел:
1 2 3 | long atol(const char *str) double atof(const char *str) long long atoll(const char *str) (C99) |
Кроме всего это есть еще несколько функций, более расширенных:
1 2 | #include <stdlib.h> long int strtol(const char *start, char **end, int radix); |
Здесь немного посложнее. Функция strtol() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром-указателем start, в значение типа long int и возвращает полученный результат. Основание системы счисления, в которой представлено преобразуемое число, определяется параметром radix. Значение radix может быть от 2 до 36.
Сначала в строке, с параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается само число. Считывание заканчивается, как только будет обнаружен символ, который не может быть частью длинного целого числа. К ним относятся пробелы, символы табуляции, знаки препинания и другие. А параметр end — должен указывать на «неиспользуемую» часть строки.
К примеру:
Значение start - "297 fields", а параметр end - будет указывать на пробел, предшествующий "fields". // Функция strtol вернет - "297"-Long int. |
Код С++:
1 2 3 4 5 | char start[80], *end; printf("Введите число: "); gets(start); return strtol(start, &end, 10); //Оно! |
И еще одно важное замечание — все символы должны быть в кодировке ASCII!.
В Wiring C (ArduinoIDE), с недавних пор появились свои функции.
string*.toInt() — очень простая в обращении функция. И весьма напоминает Pascal…
1 2 3 4 5 6 7 | String str; char num[2] = {'1','5'}; //.... str = String(num[0]); str += String(num[1]); //.... int result = str.toInt(); //Результат |
Кроме всего этого есть еще один способ — преобразование по таблице ASCII, которую вы могли видеть выше.
Тут простая подстановка кодов символов и последующая их обработка.