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

16 進数の整数の解析には使用できませんatoi()。10 進数のみを処理します。

使用sscanf():

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

atoi16 進数の整数では機能しません。strtoul代わりに使用してください。

c の整数型には書式設定情報がありません。フォーマット情報を保持したい場合は、脇に置いておく必要があります。

于 2013-09-27T14:58:04.223 に答える
1

atoi10 進数のみを解析します。atoi数字の 0 の後に非数字の x が続きます。数字以外はスキャンを停止します。任意の数値 (0xaaa、12、0777) を正しく解析するにはstrtol、 に 0 を渡して使用する必要がありますbase

于 2013-09-27T14:57:01.493 に答える