我有一个Sqlite数据库,我正在使用这个循环读取值:
int i;
for(i=0; i<argc; i++) // [0] = IP, [1] = seq, [2] = count
{
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
if (atoi(argv[2]) > stealthBeta)
{
confirmSEQ((uint32_t)argv[1]);
}
argv[1]
中的值作为UNSIGNED INT
存储在数据库中,并正在正确地写入控制台,但是当我调用该函数时,我的编号错误。
我已经尝试过它,但它并没有完全正常工作。从char*
到uint32_t
的正确方法是什么?
答案 0 :(得分:0)
要将字符串转换为其代表的数字,请使用strtol()
中的strtoul()
或<stdlib.h>
。 strtoul()
解析unsigned long
,保证至少32位宽。将0
作为base
参数传递可以转换前缀为0x
的十六进制表示形式。前缀为0
的值将被解析为八进制,否则解析将以十进制形式完成。
#include <stdlib.h>
...
if (strtol(argv[2], NULL, 0) > stealthBeta) {
confirmSEQ((uint32_t)strtoul(argv[1], NULL, 0));
}
答案 1 :(得分:0)
使用atoi()
转换为int
。
使用(unsigned)atoi()
转换为unsigned
。
例如,在您的情况下:
if (atoi(argv[2]) > stealthBeta)
{
confirmSEQ((uint32_t)atoi(argv[1]));
}