Cómo convertir un puntero de cadena a una variable de 64 bits (_int64)?
-
18-09-2019 - |
Pregunta
Como escribí una aplicación con la main(int argc, char * argv[])
función
cuando inicio la aplicación, quiero enviar algunos parámetros como
(Asumir el nombre de la aplicación es ffdisk
)
>ffdisk -f 111123123131321312312123 1
Usted ve el tercer parámetro tal vez un parámetro Int64 en mi intención original ...
Sin embargo, en función principal, argv [2] es puntero de cadena, así que ¿cómo puede convertir esta cadena en una variable Int64?
Gracias ...
Siempre estoy atascado en problemas desordenados ....
Solución
Puede utilizar _atoi64, funciones _strtoi64 en stdlib.h
Otros consejos
No tenemos múltiples formas, utilizar alguna biblioteca argc / argv analizar, de forma manual o utilizar sscanf o atol funciones de biblioteca.
#include <stdlib.h>
int main(int argc, char** argv) {
second_parm_as_long_long = atoll(argv[2]);
return 0;
}
A medida que estés apuntan a Windows y Linux, es posible que desee mantenerse dentro de la funcionalidad presente en ambos sistemas. Eso significa liso C89 estándar.
Pero llanura C89 Norma no requiere implementaciones de proporcionar un tipo entero de 64 bits. Por lo tanto, le pegan todos modos.
Asumiendo que tiene un tipo (dependiente de la implementación) lo suficientemente grande para sus necesidades, puede crear el número bits dígito a dígito ...
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 */
Para Linux, la biblioteca C de GNU tiene getopt . Para Windows, puede echar un vistazo a XGetopt
O bien, puede echar un vistazo a argtable (pero nunca he tenido la oportunidad de usarlo)
También en C ++:
Boost.Program_option s permite los desarrolladores de programas para obtener el programa de opciones, que es (nombre, valor) pares desde el usuario, a través convencional métodos tales como la línea de comandos y archivo de configuración.
o
El gflags paquete contiene una biblioteca que implementa comandos procesamiento de banderas. Como tal, es una reemplazo para getopt (). Tiene aumento de la flexibilidad, incluyendo soporte integrado para C ++ tipos como cadena, y la capacidad de definir banderas en el archivo de origen en el que se utilizan.
Sólo tiene que elegir uno.