string to unsigned long long
-
Hey ich will einen string in einen unsigned long long umwandeln.
Laut dieser Webseite: http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=%2Fcom.ibm.zos.r12.bpxbd00%2Fstrtoull.htm müsste das mit der Funktion strtoull gehen. Bei mir funktioniert es aber nicht obwohl die Funktion angeblich in der stdlib.h mit drin ist.
Bei mir gibt es aber diese Funktion:
_strtoui64_l die auch angeblich unsigned long long als Rückgabewert hat.
kann mir jemand sagen, wie man die benutzt oder wie man es sonst machen kann?
Und ja ich möchte wirklich einen unsigned long long und kein uint64_t.
-
de.crumble schrieb:
Bei mir funktioniert es aber nicht obwohl die Funktion angeblich in der stdlib.h mit drin ist.
Code + Fehlermeldung bitte. strtoull gibt es seit C99 und das funktioniert auch.
Bei mir gibt es aber diese Funktion:
_strtoui64_l die auch angeblich unsigned long long als Rückgabewert hat.
kann mir jemand sagen, wie man die benutzt oder wie man es sonst machen kann?Ich nehme mal an, genauso wie in der Dokumentation beschrieben.
Und ja ich möchte wirklich einen unsigned long long und kein uint64_t.
Seltsam. Ein uint64_t kann immer verlustfrei in einen unsigned long long umgewandelt werden.
-
tgar schrieb:
de.crumble schrieb:
Bei mir funktioniert es aber nicht obwohl die Funktion angeblich in der stdlib.h mit drin ist.
Code + Fehlermeldung bitte. strtoull gibt es seit C99 und das funktioniert auch.
Tja, der MS-Compiler unterstützt aber kein C99. Vielleicht hilft eine neuere Version, weil diese Funktionen Teil von C++11 sind, was MSVC unterstüzt (aber eben erst seit ungefähr 2011). Vielleicht waren sie auch so nett, dabei diese Funktionen der C-Bibliothek hinzu zu fügen (vielleicht aber auch nicht, der C-Compiler ist bloß ein ungeliebtes Stiefkind -> Dokumentation angucken).
Ansonsten bleibt wohl tatsächlich nichts anderes übrig (abgesehen von einer eigenen Funktion - nicht empfehlenswert) als die genannten internen Funktionen des Compilers zu benutzen. Da das nur die MSVC-Plattform betrifft, kannst du dir sicher sein, dass ein unsigned long long immer in einen uint64 passt (@tgar: Er will es doch anders herum, oder?
). Man könnte vielleicht etwas definieren:
#if defined(_MSC_VER) #define strtoull _strtoui64_l #endif
Nicht gerade sauber, aber sollte als Notnagel funktionieren.
-
SeppJ schrieb:
Da das nur die MSVC-Plattform betrifft, kannst du dir sicher sein, dass ein unsigned long long immer in einen uint64 passt (@tgar: Er will es doch anders herum, oder?
).
Jetzt bin ich auch
.
Und ja ich möchte wirklich einen unsigned long long und kein uint64_t.
Er will einen unsigned long long
Er will keinen uint64_t
Es gibt _strtoui64_l, das einen uint64 liefert
Er will aber _strtoui64_l, das einen unsigned long long liefertIch sage: Kein Problem, uint64 passt immer in einen ulong long rein. Im schlimmsten Fall hat man _UI64_MAX als Ausgabe, obwohl es in einen ulong long reingepasst hätte. Der Code muss aber sowieso so angepasst sein, dass er mit _UI64_MAX als kleinstmögliches Maximum rechnet.
-
tgar schrieb:
Im schlimmsten Fall hat man _UI64_MAX als Ausgabe, obwohl es in einen ulong long reingepasst hätte.
Ich habe das so verstanden, dass er diesem Fall unbedingt vermeiden möchte.