C ++ strtoull () - Стандартна бібліотека C ++

Функція strtoull () в C ++ інтерпретує вміст рядка як інтегральний номер вказаної бази і повертає його значення як unsigned long long int.

Функція strtoull () в C ++ інтерпретує вміст рядка як інтегральний номер вказаної бази і повертає його значення як unsigned long long int.

Ця функція також встановлює покажчик, який вказує на перший символ після останнього дійсного символу рядка, якщо такий є, інакше вказівник встановлюється як нульовий.

 Для основи 10 і рядка "41aac" Дійсна числова частина -> 42 Перший символ після дійсної числової частини -> a

прототип strtoull () (за стандартом C ++ 11)

 непідписаний long long int strtoull (const char * str, char ** end, int base);

Функція strtoull () приймає рядок, вказівник на символ і ціле значення - base як свій параметр, інтерпретує вміст рядка як цілісний номер даної бази і повертає непідписане long long int значення.

Ця функція визначена у файлі заголовка.

Параметри strtoull ()

  • str: Рядок, що представляє ціле число.
  • end:Посилання на вже виділений об'єкт типу char *. Значення end встановлюється функцією наступному символу в str після останнього дійсного символу. Цей параметр також може бути нульовим покажчиком, і в цьому випадку він не використовується.
  • base:Основа інтегральної величини. Набір допустимих значень для бази дорівнює (0, 2, 3,…, 35, 36).

strtoull () Повернене значення

Функція strtoull () повертає:

  • непідписане long long int значення (яке перетворюється із рядка).
  • 0, якщо не вдалося виконати дійсне перетворення.

Приклад 1: Як працює функція strtoull ()?

 #include #include #include using namespace std; int main() ( int base = 10; char numberString() = "231ax12"; char *end; unsigned long long int number; number = strtoull(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Unsigned Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "231"); cout << "String value = " << numberString << endl; number = strtoull(numberString, &end, base); cout << "Unsigned Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )

Коли ви запускаєте програму, результат буде:

 Значення рядка = 231ax12 Беззнакове довге довге значення int = 231 Кінцевий рядок = ax12 Значення рядка = 231 Беззнакове довге довге значення int = 231 Нульовий покажчик

Дійсне ціле значення для функції strtoull () складається з:

  • Необов’язковий знак + або -.
  • Префікс 0 для вісімкової основи (застосовується лише тоді, коли основа = 8 або 0).
  • Префікс 0x або 0X для шістнадцяткової бази (застосовується лише тоді, коли база = 16 або 0).
  • Послідовність цифр та / або алфавітів (якщо основа більше 10).

Якщо аргумент на початку містить знак мінус (-), від’ємне число неявно перетворюється на беззнаковий довгий довгий тип int, який є додатним числом.

Допустимими значеннями для бази параметрів є (0, 2, 3,…, 35, 36). Набір дійсних цифр для основи 2 - (0, 1), для основи 3 - (0, 1, 2) тощо. Для баз, починаючи з 11 до 36, дійсними цифрами є алфавіти. Набір дійсних цифр для основи 11 дорівнює (0, 1, …, 9, A, a), для основи 12 - (0, 1, …, 9, A, a, B, b) тощо.

Приклад 2: функція strtoull () з різними основами

 #include #include using namespace std; int main() ( char *end; cout << "148ax" << " to Unsigned Long Long Int with base-5 = " << strtoll("148ax", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-15 = " << strtoll("148ax", &end, 15) << endl; cout << "End String = " << end << endl << endl; cout << "148ax" << " to Unsigned Long Long Int with base-35 = " << strtoll("148ax", &end, 35) << endl; cout << "End String = " << end << endl << endl; return 0; )

Коли ви запускаєте програму, результат буде:

 148ax до Беззнакового Long Long Int з базою-5 = 9 Кінцева рядка = 8ax 148ax до Непідписаного Long Long Int з base-5 = 9 Кінцева рядка =

Функція strtoull () ігнорує всі провідні пробіли, поки не буде знайдено основний непробіл.

Загалом, допустимий цілочисельний аргумент для функції strtoull () має такий вигляд:

 (пробіли) (- | +) (0 | 0x) (буквено-цифрові символи)

Потім, починаючи з цього символу, потрібно якомога більше символів, які формують дійсне цілочисельне подання і перетворюють їх у довге довге значення int. Все, що залишилось від рядка після останнього дійсного символу, ігнорується і не впливає на результат.

Приклад 3: функція strtoull () для пропуску пробілів, мінусових та недійсних перетворень

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Unsigned Long Long Int with base-11 = " << strtoull(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; /* Negative value is converted to unsigned long long int type */ cout << " -110bcd" << " to Unsigned Long Long Int with base-2 = " << strtoull(" -110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Unsigned Long Long Int with base-10 = " << strtoull("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Коли ви запускаєте програму, результат буде:

 25axbz в Беззнаковий Long Long Int з базою-11 = 307 Кінцевий рядок = xbz -110bcd в Беззнаковий Long Long Int з base-2 = 18446744073709551610 Кінцевий рядок = bcd ax110.97 в Беззнаковий Long Long Int з base-10 = 0 Кінцевий рядок = сокира110,97

Якщо основа дорівнює 0, числова база визначається автоматично, переглядаючи формат рядка. Якщо префікс дорівнює 0, основа - восьмерична (8). Якщо префікс 0x або 0X, основа є шістнадцятковою (16), в іншому випадку база є десятковою (10).

Приклад 4: функція strtoull () з базою 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "017x" << " to Unsigned Long Long Int with base-0 = " << strtoull("017x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x1cg" << " to Unsigned Long Long Int with base-0 = " << strtoull("0x1cg", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "70sxz" << " to Unsigned Long Long Int with base-0 = " << strtoull("70sxz", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Коли ви запускаєте програму, результат буде:

 017x до Непідписаного довгого довгого Int з базою-0 = 15 Кінцева рядка = x 0x1cg до Непідписаного довгого довгого Int з базою-0 = 28 Кінцева рядка = g 70sxz до Беззнакового довгого довгого Int з base-0 = 70 Кінцевий рядок = sxz

Цікаві статті...