Функции преобразования строк в числовые значения
Замечания
Каждая функция в семействе 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
]digits
digits
.
[{e
D
| 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