Spec-Zone.ru › C

wcstol, wcstoll

Определён в заголовочном файле <wchar.h>
long      wcstol( const wchar_t * str, wchar_t ** str_end, int base );
(начиная с C95)
(до C99)
long      wcstol( const wchar_t * restrict str, wchar_t ** restrict str_end,
                  int base );
(начиная с C99)
long long wcstoll( const wchar_t * restrict str, wchar_t ** restrict str_end,
                   int base );
(начиная с C99)

Интерпретирует целочисленное значение в широкостроковой строке, на которую указывает str.

Отбрасывает все пробельные символы (определяемые при вызове iswspace), пока не будет найден первый непробельный символ, а затем считывает максимально возможное количество символов, образующих корректное представление целого числа в системе счисления с основанием n (где n=base), и преобразует их в целочисленное значение. Корректное целочисленное значение состоит из следующих частей:

  • (необязательно) знак плюс или минус
  • (необязательно) префикс (0), указывающий на восьмеричную систему счисления (применяется только, если основание равно 8 или 0)
  • (необязательно) префикс (0x или 0X), указывающий на шестнадцатеричную систему счисления (применяется только, если основание равно 16 или 0)
  • последовательность цифр

Допустимые значения основания: {0, 2, 3, ..., 36}. Допустимые цифры для целых чисел в системе счисления с основанием 2: {0, 1}, для целых чисел с основанием 3: {0, 1, 2} и так далее. Для оснований, превышающих 10, допустимыми цифрами являются буквы, начиная с Aa для целых чисел с основанием 11 и заканчивая Zz для целых чисел с основанием 36. Регистр букв не учитывается.

Текущая локаль C, установленная с помощью локали, может допускать дополнительные числовые форматы.

Если значение base равно 0, основание системы счисления определяется автоматически: если префикс — 0, основание равно восьми; если префикс — 0x или 0X, основание равно шестнадцати; в противном случае основание равно десяти.

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

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

Параметры

str - указатель на завершающуюся нулём широкостроковую строку, которую нужно интерпретировать
str_end - указатель на указатель на широкий символ
base - основание системы счисления для интерпретируемого целочисленного значения

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

Целочисленное значение, соответствующее содержимому str, если функция выполнена успешно. Если преобразованное значение выходит за пределы диапазона соответствующего типа возвращаемого значения, возникает ошибка диапазона и возвращается LONG_MAX, LONG_MIN, LLONG_MAX или LLONG_MIN. Если преобразование выполнить невозможно, возвращается 0.

Пример

#include <stdio.h>
#include <errno.h>
#include <wchar.h>

int main(void)
{
    const wchar_t *p = L"10 200000000000000000000000000000 30 -40";
    printf("Parsing L'%ls':\n", p);
    wchar_t *end;
    for (long i = wcstol(p, &end, 10);
         p != end;
         i = wcstol(p, &end, 10))
    {
        printf("'%.*ls' -> ", (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf("range error, got ");
            errno = 0;
        }
        printf("%ld\n", i);
    }
}

Вывод:

Parsing L'10 200000000000000000000000000000 30 -40':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 9223372036854775807
' 30' -> 30
' -40' -> -40

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.29.4.1.2 Функции wcstol, wcstoll, wcstoul и wcstoull (стр. 429–430)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.24.4.1.2 Функции wcstol, wcstoll, wcstoul и wcstoull (стр. 375–376)

См. также

strtolstrtoll
(C99)
преобразует байтовую строку в целочисленное значение
(функция)
wcstoulwcstoull
(C95)(C99)
преобразует широкостроковую строку в беззнаковое целочисленное значение
(функция)
Документация C++ для wcstol, wcstoll

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/wide/wcstol

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API