Wie bekommt man ein unsigned long aus einem string?

Was ist der sicherste und beste Weg, um ein unsigned long aus einem string in C++?

Ich kenne eine Reihe von möglichen Methoden.

Ersten konvertieren eine signierte long genommen von atol.

char *myStr; //Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));

Das offensichtliche problem mit diesem ist, was passiert, wenn der gespeicherte Wert in myStr größer ist als signed long enthalten? Was bedeutet das atol abrufen?

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 kompliziert für meine Bedürfnisse. Ich möchte eine einfache Funktion, string, unsigned long zur Basis 10. Auch der Fehler-handling lässt sehr zu wünschen übrig.

Die Letzte Möglichkeit, die ich gefunden habe, ist die Verwendung von sscanf.

char *myStr; //Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
    //do some error handling
}

Wieder, Fehler-Handhabung lässt viel zu wünschen übrig, und ein wenig komplizierter, als ich möchte.

Den übrigen offensichtliche option ist das schreiben meiner eigenen entweder ein wrapper um eine der vorherigen Möglichkeiten oder irgendeine Sache, die Zyklen, die durch den string und manuell konvertiert jede Ziffer, bis es erreicht ULONG_MAX.

Meine Frage ist, was sind die anderen Optionen, dass mein google-fu versagt hat, zu finden? Jedes Ding, das in die C++ - std-Bibliothek, die werden sauber konvertiert einen string in einen unsigned long und Ausnahmen werfen Versagen?

Ich entschuldige mich, wenn dies ist ein dupe, aber ich konnte nicht finden, Fragen, die genau meinen.

atol: "Wenn der richtige Wert ist außerhalb des Bereichs der darstellbaren Werte, LONG_MAX oder LONG_MIN zurückgegeben." cplusplus.com/reference/clibrary/cstdlib/atol
Paar Fragen bin ich mir nicht sicher, ob Sie Duplikate sind jedoch: (1) stackoverflow.com/questions/1243428/... (2) stackoverflow.com/questions/1435253/...
Ich verstehe nicht, was haben Sie gegen strtoul. Es ist die perfekte Funktion für diese. Geben Sie eine 0 für die Basis-und es wird konvertieren von zahlen mit beliebiger Basis-Präfix-strings Ihre C-Bibliothek versteht, wie "0x".

InformationsquelleAutor Daniel Bingham | 2009-09-27

Schreibe einen Kommentar