Ich würde gerne einen String in einen Unsigned Long Long konvertieren... Unter Visual C++ 2010 wird die Funktion strtoul() noch gefunden, die Funktion strtoull() gibt es scheinbar nicht? Also wie wird die Konvertierung gemacht? z.B. von std:string strHelper = "715258222024181381" nach unsigned long long ull_destination; Dies geht scheinbar nicht: ull_destination = strtoul(strHelper.c_str(), NULL, 10);
ca so: unsigned long long result = 0; while(strHelper) { result *= 10; result += (*strHelper++ - '0'); }
sprintf mit %llu Edit: natürlich sscanf. Du willst ja in die andere Richtung.
Achja strHelper ist in meinem Fall ein char Array. Aber das Prinzip sollte verständlich sein.
Bitte um Erläuterung & Nein, das funktioniert nicht!! Die while()-Schleife ist fehlerhaft: error C2451: conditional expression of type 'std::string' is illegal Danke.
Thomas schrieb: > Bitte um Erläuterung & Nein, das funktioniert nicht!! Weil strHelper bei dir kein char Array ist. Für std:string muss es wohl so ähnlich aussehen: result = 0; for(int i=0; i<strHelper.length; ++i) { result *= 10; result += strHelper[i] - '0'; }
@Karl Heinz Deine Lösung stimmt leider auch nicht so recht: Das war doch so gemeint oder? unsigned long long ull_destination = 0; std:string strHelper = "715258222024181381" sscanf_s(strHelper, "%llu", &ull_destination); Ist das mit dem %llu überhaupt korrekt? Wieso nicht %ull? Danke.
std::stringstream ss; std::string s = "12182738123117"; unsigned long long x; ss << s; ss >> x; oder: x = boost::lexical_cast<unsigned long long>(s);
@Thomas (nicht ich) Vielen herzlichen Dank, dass hat jetzt funktioniert: for(unsigned int i=0; (i < strHelper.length()); ++i) { nResult *= 10; nResult += strHelper[i] - '0'; }
Z.B.
1 | std::string str = "12345678901234567890"; |
2 | unsigned long long resu64; |
3 | |
4 | std::istringstream strStream(str); |
5 | strStream >> resu64; |
In Visual C++ heißt die äquivalente Funktion: _strtoui64 http://msdn.microsoft.com/de-de/library/85zk715d(v=vs.80).aspx
..nimmt mann unter richtigem(tm) C++ für sowas nicht boost::lexical_cast? ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.