std::wcstoul, std::wcstoull
| Определено в заголовочном файле <cwchar>
|
||
unsigned long wcstoul( const wchar_t* str, wchar_t** str_end, int base ); |
||
unsigned long long wcstoull( const wchar_t* str, wchar_t** str_end, int base ); |
(начиная с C++11) | |
Интерпретирует целое число без знака в широкой строке, на которую указывает str.
Отбрасывает любые пробельные символы (определяемые вызовом std::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 в случае успеха. Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона и возвращается ULONG_MAX или ULLONG_MAX. Если преобразование невозможно выполнить, возвращается 0.
Пример
#include <cwchar>
#include <errno.h>
#include <iostream>
#include <string>
int main()
{
std::setlocale(LC_ALL, "en_US.utf8");
const wchar_t* p = L"10 200000000000000000000000000000 30 40";
wchar_t *end;
std::wcout << L"Разбор L'" << p << "':\n";
for (unsigned long i = std::wcstoul(p, &end, 10);
p != end;
i = std::wcstoul(p, &end, 10))
{
std::wcout << '\'' << std::wstring(p, end-p) << "' -> ";
p = end;
if (errno == ERANGE)
{
std::wcout << L"ошибка диапазона, получено ";
errno = 0;
}
std::wcout << i << '\n';
}
}
Возможный вывод:
Разбор L'10 200000000000000000000000000000 30 40':
'10' -> 10
' 200000000000000000000000000000' -> ошибка диапазона, получено 18446744073709551615
' 30' -> 30
' 40' -> 40
Смотрите также
(C++11) |
преобразует байтовую строку в беззнаковое целое число (функция) |
| преобразует широкую строку в целочисленное значение (функция) | |
Документация C по wcstoul, wcstoull
| |