Namespaces
Variants

wcstoul, wcstoull

From cppreference.net
< c ‎ | string ‎ | wide
Определено в заголовочном файле <wchar.h>
unsigned long wcstoul ( const wchar_t * str, wchar_t ** str_end, int base ) ;
(начиная с C95)
(до C99)
unsigned long wcstoul ( const wchar_t * restrict str,
wchar_t ** restrict str_end, int base ) ;
(начиная с C99)
unsigned long long wcstoull ( const wchar_t * restrict str,
wchar_t ** restrict str_end, int base ) ;
(начиная с C99)

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

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

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

Целочисленное значение, соответствующее содержимому str при успешном выполнении. Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона и возвращается ULONG_MAX или ULLONG_MAX . Если преобразование не может быть выполнено, 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 (unsigned long i = wcstoul(p, &end, 10);
         p != end;
         i = wcstoul(p, &end, 10))
    {
        printf("'%.*ls' -> ", (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf("range error, got ");
            errno = 0;
        }
        printf("%lu\n", i);
    }
}

Вывод:

Parsing '10 200000000000000000000000000000 30 40':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 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)

Смотрите также

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