Поделиться через


Функции преобразования строк в числовые значения

Замечания

Каждая функция в семействе strto* преобразует строку, завершаемую null, в числовое значение. Доступные функции перечислены в следующей таблице.

Function Description
strtod Преобразует строку в значение двойной точности с плавающей запятой
strtol Преобразуют строку в целое число типа long
strtoul Преобразуют строку в целое число без знака типа unsigned long
_strtoi64 Преобразует строку в 64-разрядное целое число типа __int64
_strtoui64 Преобразует строку в беззнаковое 64-разрядное целое число типа __int64

wcstod, wcstol, wcstoul и _wcstoi64 — это версии с расширенными символами функций strtod, strtol, strtoul и _strtoi64 соответственно. Строковый аргумент каждой из этих функций для расширенных символов представляет собой строку расширенных символов; каждая функция ведет себя так же, как и эквивалентная функция для однобайтовых символов.

Функция strtod принимает два аргумента: первая — входная строка, а второй — указатель на символ, который заканчивает процесс преобразования. strtol, strtoul_strtoi64 и _strtoui64 принимает третий аргумент в качестве базы чисел для использования в процессе преобразования.

Входная строка представляет собой последовательность символов, которые могут обрабатываться как числовое значение указанного типа. Каждая функция перестает читать строку на первом символе, которую она не может распознать как часть числа. Этот символ может быть завершающим символом NULL. Для strtol, strtoul, _strtoi64 и _strtoui64 этот конечный символ также может быть первым числовым символом, который больше определенного пользователем основания системы счисления или равен ему.

Если предоставленный пользователем указатель на символ завершения преобразования не задан NULL или nullptr во время вызова, указатель на символ, остановивший сканирование, будет сохранен там. Если выполнить преобразование невозможно (не найдены допустимые цифры или указано недопустимое основание), по этому адресу сохраняется значение указателя на строку.

strtod ожидает строку следующего вида:

[whitespace] [sign]digitsdigits. [{eD | d | E | }[sign]]digits

Может whitespace состоять из пробелов или символов табуляции, которые игнорируются; sign либо плюс (+), либо минус (-); и digits являются одним или несколькими десятичными цифрами. Если перед символом основания системы счисления нет никаких цифр, то после него должна отображаться хотя бы одна цифра. За десятичными цифрами может следовать показатель степени, который состоит из вводной буквы (d, D, e или E) и при необходимости целого числа со знаком. Если экспонентная часть или радикс не отображается, предполагается, что символ радикса следует за последней цифрой в строке. Первый символ, который не соответствует этой форме, останавливает сканирование.

Функции strtol, strtoul, _strtoi64 и _strtoui64 ожидают строку следующего вида:

[] [whitespace{+ | -}] [0 [{ x | X }]] [digits]

Если базовый аргумент составляет от 2 до 36, он используется в качестве основы числа. Если это значение 0, для определения базы используются начальные символы, на которые ссылается указатель завершения преобразования. Если первый символ равен 0, а второй символ не является x или X, строка интерпретируется как восьмеричное целое число; в противном случае он интерпретируется как десятичное число. Если первый символ — 0, а второй символ равен x или X, строка интерпретируется как шестнадцатеричное целое число. Если первый символ — от 1 до 9, строка интерпретируется как десятичное целое число. Буквам от а до z (или от А до Z) присваиваются значения от 10 до 35. Допускаются только буквы с присвоенными значениями меньше base. strtoul и _strtoui64 допускают в качестве префикса знак плюса (+) или знак минуса (-); знак минуса перед числом показывает, что возвращаемое значение отрицательное.

Выходное значение зависит от параметра LC_NUMERIC категории языкового стандарта. Дополнительные сведения см. в разделе setlocale. Версии этих функций без суффикса _l используют текущий языковой стандарт для данного поведения, зависимого от языкового стандарта. Версии с суффиксом _l идентичны, однако они используют переданный параметр языкового стандарта.

Если значение, возвращаемое этими функциями, приведет к переполнению или переполнению или, когда преобразование невозможно, возвращаются специальные значения регистра, как показано ниже.

Function Condition Возвращенное значение
strtod Overflow +/- HUGE_VAL
strtod Потеря точности или отсутствие преобразования 0
strtol Переполнение + LONG_MAX
strtol Переполнение – LONG_MIN
strtol Потеря точности или отсутствие преобразования 0
_strtoi64 Переполнение + _I64_MAX
_strtoi64 Переполнение – _I64_MIN
_strtoi64 Преобразование не выполнено 0
_strtoui64 Overflow _UI64_MAX
_strtoui64 Преобразование не выполнено 0

_I64_MAX, _I64_MINи _UI64_MAX определены в <LIMITS.H>.

Функции wcstod, wcstol, wcstoul, _wcstoi64 и _wcstoui64 — это, соответственно, версии функций strtod, strtol, strtoul, _strtoi64 и _strtoui64 для расширенных символов; указатель на аргумент конца преобразования в каждой из этих функций для расширенных символов представляет собой строку расширенных символов. В остальном каждая из этих функций для расширенных символов работает так же, как и ее аналог для однобайтовых символов.

См. также

Преобразование данных
Локаль
Интерпретация последовательностей многобайтовых символов
Поддержка математических и плавающих точек
atof, , _atof_l_wtof_wtof_l