Wie konvertieren Sie einen String -Zeiger in eine 64 -Bit -Variable (_int64)?
-
18-09-2019 - |
Frage
Als ich eine App mit der Funktion schrieb main(int argc, char * argv[])
Wenn ich die Anwendung starte, möchte ich einige Parameter senden (Angenommen, der App -Name ist ffdisk
)
>ffdisk -f 111123123131321312312123 1
Sie sehen den dritten Param, vielleicht einen INT64 -Param in meiner ursprünglichen Absicht ...
Aber in der Funktion Main ist Argv [2] String -Zeiger. Wie kann diese Zeichenfolge also in eine INT64 -Variable konvertiert werden?
Danke ...
Ich stecke immer bei chaotischen Problemen fest ....
Lösung
Sie können _atoi64, _strtoi64 -Funktionen in stdlib.h verwenden
Andere Tipps
Es gibt mehrere Möglichkeiten, verwenden Sie eine Argc/Argv -Parsing -Bibliothek oder verwenden Sie manuell SSCANF- oder ATOL -Bibliotheksfunktionen.
#include <stdlib.h>
int main(int argc, char** argv) {
second_parm_as_long_long = atoll(argv[2]);
return 0;
}
Wenn Sie auf Windows und Linux abzielen, möchten Sie möglicherweise in den auf beiden Systemen vorhandenen Funktionen gut bleiben. Das bedeutet einfacher Standard C89.
Ein einfacher Standard-C89 erfordert jedoch keine Implementierungen, um einen 64-Bit-Ganzzahltyp bereitzustellen. Also steckst du trotzdem fest.
Angenommen, Sie haben einen Typ (implementierungsabhängig), der groß genug für Ihre Anforderungen ist, können Sie die Nummer erstellen bisschen Ziffer nach Ziffer ...
value = 0; /* value is of the large enough type */
char *p = argv[2];
while (*p) {
value *= 10;
value += *p - '0';
p++;
}
/* if argv[2] was "111123123131321312312123"
* and the type is large enough,
* value now has 111123123131321312312123 */
Für Linux hat die GNU C -Bibliothek Getopt. Für Windows können Sie einen Blick darauf werfen Xgetopt
Oder Sie können sich ansehen Argumierbar (Aber ich hatte nie die Gelegenheit, es zu benutzen)
Auch in C ++:
Boost.Program_OptionS ermöglicht Programmentwicklern, über herkömmliche Methoden wie die Befehlszeile und die Konfigurationsdatei Programmoptionen, dh (Name, Wert-) Paare des Benutzers, zu erhalten.
oder
Das GFLAGs Das Paket enthält eine Bibliothek, die die Verarbeitung von Befehlslinienflags implementiert. Als solches ist es ein Ersatz für GetOpt (). Es hat eine erhöhte Flexibilität, einschließlich integrierter Unterstützung für C ++-Typen wie String und die Möglichkeit, Flags in der Quelldatei zu definieren, in der sie verwendet werden.
Wählen Sie einfach einen aus.