我正在使用以下内容解析文件:
0x1001
0x1001
0x0004
...
以下是我的代码的一部分:
while(fgets (line, sizeof(line),fp) != NULL)
{
inst[count] = atoi(line);
printf("%d\n",inst[count]);
count++;
}
我的printf()
结果只有零。我想保留与我的数组inst
中已解析文件中所写的完全相同的值,但atoi()
不能很好地完成工作。我也试过strtoul()
但没有成功。
在将它们传递给C中的“int”类型时,有没有办法在文件中保留相同的整数格式?
答案 0 :(得分:5)
您不能使用atoi()
来解析十六进制整数,它只处理十进制。
使用sscanf()
:
if(sscanf(line, "%x", &inst[count]) == 1)
printf("got 0x%x\n", inst[count]);
答案 1 :(得分:2)
atoi
不适用于十六进制整数。请改用strtoul
。
c中的整数类型没有任何格式信息。如果您想保留格式化信息,则需要将其保留在一边。
答案 2 :(得分:1)
atoi
仅解析十进制数字。 atoi
看到数字0后跟非数字x。非数字停止扫描。要正确解析任何数字(0xaaa,12,0777),您需要使用strtol
并为base
传递0。