#include<stdio.h>
int main(int argc,char* argv[]){
int hex;
printf("\n argc : %d argv[1] : %s \n",argc,argv[1]);
hex = argv[1];
printf("\n hex : %x \n",hex);
return 0;
}
O / P:
[root@ld]# ./a.out 343ed4
argc : 2 argv[1] : 343ed4
hex : 9e1a4aa8
我想存储从命令行参数获得的十六进制值并将其存储在整数上。上面的程序,当存储十六进制值时,会给出与用户给定值不同的结果。 不能使用atoi,因为它会在数字之后剪切字母表。如何将在命令行参数中输入的十六进制存储为整数。
答案 0 :(得分:5)
这是不正确的:
hex = argv[1];
编译器应警告您将char*
分配给int
,因为argv[1]
是十六进制数字的字符串表示形式(即{'3','4','3','e','d','4','\0'}
),而不是十六进制数字本身。
你需要这样做:
sscanf(argv[1], "%x", &hex);
sscanf
为您解析十六进制数,并将结果存储在hex
。
答案 1 :(得分:4)
根据dasblinkenlight
你需要这样做:
sscanf(argv[1], "%x", &hex);
BUT
sscanf返回成功解析的参数数量(如在%x中)。所以我会添加一个检查它是1.如果它没有输入可以解析成十六进制的东西。
printf("\n argc : %d argv[1] : %s \n",argc,argv[1]);
if (sscanf(argv[1], "%x", &hex)==1)
printf("\n hex : %x \n",hex);
else
printf("\nargv[1] is not a valid hex value.");
如果您没有检查返回值,则不会在代码中找到失败点。
sscanf可用于匹配模式并从中提取变量值,例如日期导入:
int day, month, year;
int count = sscanf (inputstr, "%d/%d/%d", &day, &month, &year );
if (count!=3)
printf("bad date value");