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


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

Заметки

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

Функция

Описание

strtod

Преобразует строку к значению двойной точности с плавающей точкой.

strtol

Преобразует строку к целочисленному значению типа long

strtoul

Преобразует строку к беззнаковому целочисленному значению типа 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 во время вызова, то указатель на символ, который остановил сканирование, будет хранится вместо него. Если выполнить преобразование невозможно (не были найдены допустимые цифры, или было указано недопустимое основание), значение указателя на строку сохраняется по этому адресу.

strtod ожидает строку следующей формы:

[whitespace] [sign] [digits] [**.**digits] [ {d | D | e | 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» присваиваются значения от 10 до 35; разрешены только буквы с присвоенными значениями меньше base. strtoul и _strtoui64 допускают в качестве префикса знак плюса (+) или знак минуса (); знак минуса впереди показывает, что возвращаемое значение отрицательное.

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

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

Функция

Условие

Возвращаемое значение

strtod

Переполнение

+/- HUGE_VAL

strtod

Потеря точности или отсутствие преобразования

0

strtol

+ Переполнение.

LONG_MAX

strtol

- Переполнение.

LONG_MIN

strtol

Потеря точности или отсутствие преобразования

0

_strtoi64

+ Переполнение.

_I64_MAX

_strtoi64

- Переполнение.

_I64_MIN

_strtoi64

Преобразование не выполнено

0

_strtoui64

Переполнение

_UI64_MAX

_strtoui64

Преобразование не выполнено

0

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

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

См. также

Ссылки

Преобразование данных

Языковой стандарт

Интерпретация последовательностей в многобайтной кодировке

Поддержка чисел с плавающей запятой

atof, _atof_l, _wtof, _wtof_l