Namensräume
Varianten
Aktionen

std::wcstoimax, std::wcstoumax

Von cppreference.com
< cpp‎ | string‎ | wide
 
 
 
 
Definiert in Header <cinttypes>
std::intmax_t wcstoimax( const wchar_t* nptr, wchar_t** endptr, int base );
(seit C++11)
std::uintmax_t wcstoumax( const wchar_t* nptr, wchar_t** endptr, int base );
(seit C++11)

Interpretiert einen vorzeichenlosen ganzzahligen Wert in einer Wide-String, auf die von nptr gezeigt wird.

Verwirft beliebige Whitespace-Zeichen (wie durch Aufruf von std::iswspace identifiziert), bis das erste Nicht-Whitespace-Zeichen gefunden wird, nimmt dann so viele Zeichen wie möglich, um eine gültige Basis-n (wobei n = base) vorzeichenlose Ganzzahl-Darstellung zu bilden und wandelt sie in einen ganzzahligen Wert um. Der gültige vorzeichenlose Ganzzahlwert 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 Zeiger, auf den von endptr gezeigt wird, so, dass er auf das Wide-Zeichen nach dem letzten interpretierten Zeichen zeigt. Wenn endptr ein Nullzeiger ist, wird er ignoriert.

Inhalt

[bearbeiten] Parameter

nptr - Zeiger auf den nullterminierten Wide-String, der interpretiert werden soll
endptr - Zeiger auf einen Zeiger auf ein Wide-Zeichen
base - Basis des interpretierten Ganzzahlwerts

[bearbeiten] Rückgabewert

Der ganzzahlige Wert, der den Inhalten von str bei Erfolg entspricht. Wenn der umgewandelte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf und INTMAX_MAX, INTMAX_MIN, UINTMAX_MAX oder 0 wird entsprechend zurückgegeben. Wenn keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben.

[bearbeiten] Beispiel

#include <cinttypes>
#include <iostream>
#include <string>
 
int main()
{
    std::wstring str = L"helloworld";
    std::intmax_t val = std::wcstoimax(str.c_str(), nullptr, 36);
    std::wcout << str << " in base 36 is " << val << " in base 10\n";
 
    wchar_t* nptr;
    val = std::wcstoimax(str.c_str(), &nptr, 30);
    if (nptr != &str[0] + str.size())
        std::wcout << str << " in base 30 is invalid."
                   << " The first invalid digit is " << *nptr << '\n';
}

Ausgabe

helloworld in base 36 is 1767707668033969 in base 10
helloworld in base 30 is invalid. The first invalid digit is w

[bearbeiten] Siehe auch

(C++11)(C++11)
konvertiert einen Byte-String in std::intmax_t oder std::uintmax_t
(Funktion) [bearbeiten]
wandelt eine breite Zeichenkette in einen ganzzahligen Wert um
(Funktion) [bearbeiten]
wandelt eine breite Zeichenkette in einen vorzeichenlosen ganzzahligen Wert um
(Funktion) [bearbeiten]
C-Dokumentation für wcstoimax, wcstoumax