Преобразование строки в число и обратно
При составлении программ часто возникает задача получения данных, например, введенных в поле редактирования в числовой форме и вывод результата в текстовое поле.
Число, которое принимает участие в вычислительных процедурах, должно быть представлено в виде строки символов, понятных пользователю, для вывода на экран.
Например, число 235 состоит из трех символов — ‘2’, ‘3’, ‘5’.
Целью рассмотрения данной задачи является приведение символьной строки к соответствующему ей числовому виду.
Для этого нужно разбить символьную строку на значащие разряды и выбрать цифры, соответствующие каждому значащему разряду.
Каждый символ цифры имеет соответствующий ему код в базовой таблице кодировки:
| Символ цифры | Десятичный код | Шестнадцатеричный код | Двоичный код |
| 0 | 48 | 0x30 | 0011 0000 |
| 1 | 49 | 0x31 | 0011 0001 |
| 2 | 50 | 0x32 | 0011 0010 |
| 3 | 51 | 0x33 | 0011 0011 |
| 4 | 52 | 0x34 | 0011 0100 |
| 5 | 53 | 0x35 | 0011 0101 |
| 6 | 54 | 0x36 | 0011 0110 |
| 7 | 55 | 0x37 | 0011 0111 |
| 8 | 56 | 0x38 | 0011 1000 |
| 9 | 57 | 0x39 | 0011 1001 |
В соответствии с приведенной таблицей, значащая часть каждого символа цифры содержится в младшей тетраде битов (младших четырех разрядах). Для получения цифры, соответствующей символу, достаточно произвести операцию:
n = s & 0x0F;
где n — значащая цифра, s — символ цифры. Маска 0x0F позволяет оставить только младшие 4 значащих разряда. Старшие 4 разряда становятся равны 0.
При решении обратной задачи — представления числа в виде текстовой строки — каждая цифра значащего разряда преобразуется в соответствующий ей символ с помощью операции:
s = n | 0x30;
Указанная операция добавляет двоичное значение 0011 в старшие 4 разряда, тем самым формируя код символа из соответствующей значащей цифры.
Реализация на C++

Результат выполнения
atoi , _atoi_l , _wtoi , _wtoi_l
locale
Используемый языковой стандарт.
Возвращаемое значение
Каждая функция возвращает значение int , которое создается за счет интерпретации входных символов как числа. Функции atoi и _wtoi возвращают значение 0, если аргумент невозможно преобразовать в значение этого типа.
В случае переполнения большими отрицательными целыми значениями возвращается LONG_MIN . В подобных условиях atoi и _wtoi возвращают INT_MAX и INT_MIN . Во всех случаях, когда диапазон не соблюдается, errno принимает значение ERANGE . Если переданный параметр имеет значение NULL , вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции устанавливают для errno значение EINVAL и возвращают 0.
Комментарии
Эти функции преобразуют символьную строку в целое значение ( atoi и _wtoi ). Входная строка представляет собой последовательность символов, которые могут обрабатываться как числовое значение указанного типа. Каждая функция прекращает чтение строки на первом знаке, который она не может распознать как часть числа. Этот символ может быть нуль-символом («\0″ или L»\0»), которым завершается строка.
Аргумент str для atoi и _wtoi принимает следующую форму:
whitespace Состоит из пробела или символов табуляции, которые игнорируются; sign значение параметра — плюс (+) или минус (-); и digits — одна или несколько цифр.
Версии этих функций с суффиксом _l идентичны, за исключением того, что они используют переданный параметр языкового стандарта вместо текущего языкового стандарта. Для получения дополнительной информации см. Locale.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
| TCHAR.H ассемблер | _UNICODE & _MBCS не определено | _MBCS определяется | _UNICODE определяется |
|---|---|---|---|
| _tstoi | atoi | atoi | _wtoi |
| _ttoi | atoi | atoi | _wtoi |
Требования
| Подпрограммы | Обязательный заголовок |
|---|---|
| atoi | <stdlib.h> |
| _atoi_l , _wtoi , _wtoi_l | <stdlib.h> или <wchar.h> |
Пример
Эта программа показывает, как числа, хранящиеся в виде строки, можно преобразовать в числовые значения с помощью функции atoi .