Was ist der sicherste und beste Weg, um ein unsigned long aus einer Zeichenfolge in C++ abzurufen?Wie erhalten Sie eine Zeichenfolge ohne Vorzeichen?
Ich kenne eine Reihe von möglichen Methoden.
Zuerst konvertiert eine signierte lange aus atol genommen.
Das offensichtliche Problem damit ist, was passiert, wenn der in myStr gespeicherte Wert größer ist als eine signierte Länge enthalten kann? Was holt atol?
Die nächste Möglichkeit ist die Verwendung von strtoul.
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
Allerdings ist dies ein wenig zu kompliziert für meine Bedürfnisse. Ich hätte gerne eine einfache Funktion, string in, unsigned long base 10 out. Auch die Fehlerbehandlung lässt viel zu wünschen übrig.
Die letzte Möglichkeit, die ich gefunden habe, ist die Verwendung von sscanf.
Noch einmal, Fehlerbehandlung lässt viel zu wünschen übrig, und ein wenig komplizierter als ich möchte.
Die verbleibende offensichtliche Option ist, entweder einen Wrapper um eine der vorherigen Möglichkeiten oder etwas, das durch die Zeichenfolge zyklisch durchläuft, zu schreiben und jede Ziffer manuell zu konvertieren, bis sie ULONG_MAX erreicht.
Meine Frage ist, was sind die anderen Optionen, die mein Google-Fu nicht gefunden hat? Irgendeine Sache in der C++ - Standardbibliothek, die eine Zeichenfolge sauber in eine vorzeichenlose Länge konvertiert und Ausnahmen bei einem Fehler auslöst?
Ich entschuldige mich, wenn es sich um einen Betrogenen handelt, aber ich konnte keine Fragen finden, die genau mit meinen übereinstimmen.
'atol':" Wenn der korrekte Wert außerhalb des Bereichs der darstellbaren Werte liegt, wird LONG_MAX oder LONG_MIN zurückgegeben. " http://www.cplusplus.com/reference/clibrary/cstdlib/atol/ –
Paar Fragen, ich bin mir nicht sicher, ob es sich um Duplikate handelt: (1) http://stackoverflow.com/questions/1243428/convert- string-zu-int-mit-bool-fail-in-c/1243435 (2) http://stackoverflow.com/questions/1435253/c-syntax-question-if-var-type-int/1435268 – GManNickG
ich don verstehe nicht, was du gegen strtoul hast. Es ist die perfekte Funktion dafür. Übergeben Sie eine 0 für die Basis und es konvertiert Zahlen mit beliebigen Basis-Präfix-Strings, die Ihre C-Bibliothek versteht, wie "0x". –