Forum: PC-Programmierung C++: string to unsigned long long


von Thomas (Gast)


Lesenswert?

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);

von Thomas (Gast)


Lesenswert?

ca so:

unsigned long long result = 0;

while(strHelper) {
  result *= 10;
  result += (*strHelper++ - '0');
}

von Karl H. (kbuchegg)


Lesenswert?

sprintf mit %llu

Edit: natürlich sscanf. Du willst ja in die andere Richtung.

von Thomas (Gast)


Lesenswert?

Achja strHelper ist in meinem Fall ein char Array.
Aber das Prinzip sollte verständlich sein.

von Thomas (Gast)


Lesenswert?

Bitte um Erläuterung & Nein, das funktioniert nicht!!

Die while()-Schleife ist fehlerhaft:
error C2451: conditional expression of type 'std::string' is illegal

Danke.

von Thomas (Gast)


Lesenswert?

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';
}

von Thomas (Gast)


Lesenswert?

@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.

von Thomas (Gast)


Lesenswert?

Und bei length fehlen noch die Klammern -> strHelper.length()

von Klaus M (Gast)


Lesenswert?

std::stringstream ss;
std::string s = "12182738123117";
unsigned long long x;

ss << s;
ss >> x;

oder:

x = boost::lexical_cast<unsigned long long>(s);

von Thomas (Gast)


Lesenswert?

@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';
}

von Arc N. (arc)


Lesenswert?

Z.B.
1
std::string str = "12345678901234567890";
2
unsigned long long resu64;
3
4
std::istringstream strStream(str);
5
strStream >> resu64;

von Wurstbrot (Gast)


Lesenswert?

In Visual C++ heißt die äquivalente Funktion:

_strtoui64
http://msdn.microsoft.com/de-de/library/85zk715d(v=vs.80).aspx

von g457 (Gast)


Lesenswert?

..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
Noch kein Account? Hier anmelden.