Namensräume
Varianten
Aktionen

std::strtoul, std::strtoull

Von cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
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 ganzzahligen Wert in einer Byte-Zeichenkette, auf die str zeigt.

Verwirft alle Leerzeichen (wie durch Aufruf von std::isspace identifiziert), bis das erste Nicht-Leerzeichen gefunden wird, und nimmt dann so viele Zeichen wie möglich, um eine gültige Basis-n (wobei n=base) vorzeichenlose Ganzzahl-Repräsentation zu bilden und diese in einen ganzzahligen Wert umzuwandeln. Der gültige vorzeichenlose ganzzahlige Wert besteht aus den folgenden Teilen

  • (optional) Vorzeichen (+ oder -)
  • (optional) Präfix (0) zur Angabe der Oktalbasis (gilt nur, wenn die Basis 8 oder 0 ist)
  • (optional) Präfix (0x oder 0X) zur Angabe der Hexadezimalbasis (gilt nur, wenn die Basis 16 oder 0 ist)
  • eine Folge von Ziffern

Die Menge der gültigen Werte für base ist {0, 2, 3, ..., 36}. Die Menge der gültigen Ziffern für Basis-2-Ganzzahlen ist {0, 1}, für Basis-3-Ganzzahlen 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-Ganzzahlen bis Zz für Basis-36-Ganzzahlen. 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 ist, 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 aus den Ziffern berechnete numerische Wert negiert, als ob durch unäres Minus im Ergebnistyp, was Regeln für vorzeichenlose Integer-Überläufe anwendet.

Die Funktionen setzen den von str_end gezeigten Zeiger auf das Zeichen nach dem zuletzt interpretierten Zeichen. Wenn str_end ein Nullzeiger ist, wird er ignoriert.

Inhalt

[bearbeiten] Parameter

str - Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll
str_end - Zeiger auf einen Zeiger auf ein Zeichen, kann auf eine Position nach dem zuletzt interpretierten Zeichen gesetzt werden
base - Basis des interpretierten Ganzzahlwerts

[bearbeiten] Rückgabewert

Ganzzahliger Wert, der bei Erfolg dem Inhalt von str entspricht. Wenn 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. Wenn keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

[bearbeiten] 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'

[bearbeiten] Siehe auch

(C++11)(C++11)
konvertiert einen String in eine vorzeichenlose Ganzzahl
(function) [edit]
konvertiert einen Byte-String in einen Ganzzahlwert
(Funktion) [bearbeiten]
(C++11)(C++11)
konvertiert einen Byte-String in std::intmax_t oder std::uintmax_t
(Funktion) [bearbeiten]
wandelt eine breite Zeichenkette in einen vorzeichenlosen ganzzahligen Wert um
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen Gleitkommawert
(Funktion) [bearbeiten]
konvertiert eine Zeichensequenz in einen Ganzzahl- oder Gleitkommawert
(Funktion) [bearbeiten]
konvertiert einen Byte-String in einen Ganzzahlwert
(Funktion) [bearbeiten]
C-Dokumentation für strtoul, strtoull