如何使用atoi保持原始int值

时间:2013-09-27 14:50:37

标签: c

我正在使用以下内容解析文件:

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”类型时,有没有办法在文件中保留相同的整数格式?

3 个答案:

答案 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。