Spec-Zone.ru › C++

std::wcstol, std::wcstoll

Объявлено в заголовочном файле <cwchar>
long      wcstol ( const wchar_t* str, wchar_t** str_end, int base );
long long wcstoll( const wchar_t* str, wchar_t** str_end, int base );
(начиная с C++11)

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

Отбрасывает все пробельные символы (определяемые вызовом std::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 - основание системы счисления интерпретируемого целочисленного значения

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

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

Пример

#include <cwchar>
#include <errno.h>
#include <iostream>
#include <string>

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

Возможный вывод:

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

См. также

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

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

Spec-Zone.ru

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