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

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

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

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

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

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

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

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

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

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

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

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

Выходное значение зависит от настройки категории LC_NUMERIC языкового стандарта; дополнительные сведения см. в разделе LC_NUMERIC . Версии этих функций без суффикса _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 и _UI64_MAX определены в файле LIMITS.H.

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

📎📎📎📎📎📎📎📎📎📎