2013-09-27 19 views
0

我解析具有以下內容的文件:如何保持原來的int值與的atoi

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」類型?

回答

5

您不能使用atoi()解析十六進制整數,它只處理十進制。

使用sscanf()

if(sscanf(line, "%x", &inst[count]) == 1) 
    printf("got 0x%x\n", inst[count]); 
1

atoi只解析十進制數。 atoi看到數字0後跟非數字x。非數字停止掃描。要正確解析任何數字(0xaaa,12,0777),您需要使用strtol,其中0爲base

2

atoi不適用於十六進制整數。改爲使用strtoul

c中的整數類型沒有任何格式信息。如果你想保留格式信息,你需要保持它的一面。