2014-04-19 16 views
9

Ich nehme an, dass dies sehr einfach ist, aber ich kann es nicht zum Funktionieren bringen.Umwandlung eines std :: wstring in int

Ich versuche einfach, ein std :: wstring in ein int zu konvertieren.

Ich habe bisher zwei Methoden ausprobiert.

Die erste ist die "C" Verfahren mit "atoi" wie so zu verwenden:

int ConvertedInteger = atoi(OrigWString.c_str()); 

jedoch VC++ 2013 sagt mir:

Fehler, Argument vom Typ "const wchar_t *" ist inkompatibel mit dem Parameter des Typs "const char_t *"

Also das ist meine zweite Methode zu verwenden war, per Google-Suche:

std::wistringstream win(L"10"); 
      int ConvertedInteger; 
      if (win >> ConvertedInteger && win.eof()) 
      { 
       // The eof ensures all stream was processed and 
       // prevents acccepting "10abc" as valid ints. 
      }  

jedoch VC++ 2013 sagt mir dies:

"Fehler: unvollständiger Typ nicht erlaubt."

Was mache ich hier falsch?

Gibt es eine bessere Möglichkeit, ein std :: wstring in int und zurück zu konvertieren?

Vielen Dank für Ihre Zeit.

+1

Haben Sie '#include '? Dein Code mit dem Stringstream sollte funktionieren. – Praetorian

+0

Bitte versuchen Sie den String mit 'int ConvertedInteger = _wtoi (OrigWString);' ... –

+0

zu konvertieren. Sie könnten immer einen 'std :: string' aus dem String konstruieren und' std :: stoi' verwenden. Wenn die Anzahl groß genug ist, kann es zu einer Speicherzuordnung kommen, aber ich bezweifle, dass es schlimmer ist als die Verwendung von Stringstreams. –

Antwort

25

Keine Notwendigkeit, zu C api (atoi) oder nicht portierbare API (_wtoi) oder komplexe Lösung (wstringstream) zurückzukehren, da es bereits einfache, Standard-APIs für diese Art der Konvertierung gibt: std :: stoi und std :: to_wstring

#include <string> 

std::wstring ws = L"456"; 
int i = std::stoi(ws); // convert to int 
std::wstring ws2 = std::to_wstring(i); // and back to wstring 
+2

Ein Grund zu vermeiden, mit 'sto *()' Funktionen Familie ist, weil sie alle Ausnahmen auslösen. 'ato *()' nicht –

-2

können Sie die verfügbare API von wstring.h verwenden.

konvertieren WString zu int versuchen int ConvertedInteger = _wtoi(OrigWString);.

als Referenz verwenden msdn.microsoft.com/en-us/library/aa273408(v=vs.60).aspx.

+0

Was meinst du mit * stream gibt die String-Werte *? Die OP's [Code funktioniert] (http://coliru.stacked-crooked.com/a/c17228c41560b000), der Fehler ist woanders. – Praetorian

+0

@Praetorian Ich meine, dass, wenn wir schreiben/lesen Daten zu/von Stream-Objekt arbeitet es auf String-Werte in OP Fall ist es wstring –

+0

Das OP verwendet 'wistringstream', die mit' wchar_t's, nicht 'char's. Noch einmal, sein Code funktioniert, schaue auf den Link in meinem vorherigen Kommentar. Die Fehlermeldung über die Verwendung eines unvollständigen Typs bedeutet wahrscheinlich, dass er vergessen hat, eine Header-Datei hinzuzufügen. – Praetorian

Verwandte Themen