0

我正在解析具有以下内容的文件:

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

4

3 回答 3

5

你不能atoi()用来解析十六进制整数,它只处理十进制。

使用sscanf()

if(sscanf(line, "%x", &inst[count]) == 1)
  printf("got 0x%x\n", inst[count]);
于 2013-09-27T14:52:48.993 回答
2

atoi不适用于十六进制整数。改为使用strtoul

c 中的整数类型没有任何格式信息。如果要保留格式信息,则需要将其保留在一边。

于 2013-09-27T14:58:04.223 回答
1

atoi只解析十进制数。atoi看到数字 0 后跟非数字 x。非数字停止扫描。要正确解析任何数字(0xaaa、12、0777),您需要使用strtolwith 0 传递给base.

于 2013-09-27T14:57:01.493 回答