Namespaces
Variants

std:: strtoul, std:: strtoull

From cppreference.net
Definiert in Header <cstdlib>
unsigned long strtoul ( const char * str, char ** str_end, int base ) ;
(1)
unsigned long long strtoull ( const char * str, char ** str_end, int base ) ;
(2) (seit C++11)

Interpretiert einen vorzeichenlosen Integerwert in der Byte-Zeichenkette, auf die str zeigt.

Verwirft alle Leerzeichen (wie durch Aufruf von std::isspace identifiziert) bis zum ersten Nicht-Leerzeichen, dann nimmt so viele Zeichen wie möglich, um eine gültige Basis-n (wobei n= base ) Ganzzahldarstellung ohne Vorzeichen zu bilden und konvertiert sie in einen Ganzzahlwert. Der gültige Ganzzahlwert ohne Vorzeichen besteht aus folgenden Teilen:

  • (optional) Plus- oder Minuszeichen
  • (optional) Präfix ( 0 ) zur Kennzeichnung der Oktalbasis (gilt nur, wenn die Basis 8 oder 0 ist)
  • (optional) Präfix ( 0x oder 0X ) zur Kennzeichnung der Hexadezimalbasis (gilt nur, wenn die Basis 16 oder 0 ist)
  • eine Ziffernfolge

Die Menge der gültigen Werte für die Basis ist {0, 2, 3, ..., 36} . Die Menge der gültigen Ziffern für Basis- 2 -Integer ist {0, 1} , für Basis- 3 -Integer ist {0, 1, 2} und so weiter. Für Basen größer als 10 umfassen gültige Ziffern alphabetische Zeichen, beginnend mit Aa für Basis- 11 -Integer bis zu Zz für Basis- 36 -Integer. Die Groß-/Kleinschreibung der Zeichen wird ignoriert.

Zusätzliche numerische Formate können von der aktuell installierten C- Locale akzeptiert werden.

Wenn der Wert von base 0 beträgt, wird die numerische Basis automatisch erkannt: wenn das Präfix 0 ist, ist die Basis oktal, wenn das Präfix 0x oder 0X ist, ist die Basis hexadezimal, andernfalls ist die Basis dezimal.

Wenn das Minuszeichen Teil der Eingabesequenz war, wird der numerische Wert, der aus der Ziffernfolge berechnet wurde, negiert, als ob durch unary minus im Ergebnistyp, was die Wrap-around-Regeln für vorzeichenlose Ganzzahlen anwendet.

Die Funktion setzt den Zeiger, auf den str_end zeigt, so, dass er auf das Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn str_end ein Nullzeiger ist, wird er ignoriert.

Inhaltsverzeichnis

Parameter

str - Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll
str_end - Zeiger auf einen Zeiger zu einem Zeichen; kann auf eine Position nach dem letzten interpretierten Zeichen gesetzt werden
base - base des interpretierten Ganzzahlwerts

Rückgabewert

Integer-Wert entsprechend dem Inhalt von str bei Erfolg. Falls der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf ( errno wird auf ERANGE gesetzt) und ULONG_MAX oder ULLONG_MAX wird zurückgegeben. Falls keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

Beispiel

#include <cstdlib>
#include <errno.h>
#include <iostream>
#include <string>
int main()
{
    const char* p = "10 200000000000000000000000000000 30 -40 - 42";
    char* end = nullptr;
    std::cout << "Parsing '" << p << "':\n";
    for (unsigned long i = std::strtoul(p, &end, 10);
        p != end;
        i = std::strtoul(p, &end, 10))
    {
        std::cout << "'" << std::string(p, end - p) << "' -> ";
        p = end;
        if (errno == ERANGE)
        {
            errno = 0;
            std::cout << "range error, got ";
        }
        std::cout << i << '\n';
    }
    std::cout << "After the loop p points to '" << p << "'\n";
}

Mögliche Ausgabe:

Parsing '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
After the loop p points to ' - 42'

Siehe auch

(C++11) (C++11)
konvertiert einen String in einen vorzeichenlosen Integerwert
(Funktion)
konvertiert einen Byte-String in einen Integerwert
(Funktion)
(C++11) (C++11)
konvertiert einen Byte-String zu std::intmax_t oder std::uintmax_t
(Funktion)
konvertiert einen Wide-String in einen vorzeichenlosen Integerwert
(Funktion)
konvertiert einen Byte-String in einen Gleitkommawert
(Funktion)
(C++17)
konvertiert eine Zeichenfolge in einen Integer- oder Gleitkommawert
(Funktion)
konvertiert einen Byte-String in einen Integerwert
(Funktion)
C-Dokumentation für strtoul , strtoull