2011-09-07 64 views
0

我有一個文本文件的十六進制值後,我fscanf值我需要知道如何可以將其從十六進制字符串轉換爲int。然後將其轉換回十六進制字符串以供以後打印。任何人都知道這個算法?謝謝。十六進制字符串到int轉換在C

+2

爲什麼不要在格式字符串中使用'%x'? –

+3

使用%x格式說明符而不是%s – Marlon

+0

它不起作用,因爲我需要將該值放在int類型的變量中,因此當使用%x格式我在 – Glove

回答

4

您應該使用%x格式說明符代替%s來讀取您的值。這將讀取數據爲十六進制整數。

例如,如果你的文件看起來是這樣的:

ff3c 5A cb2d

然後你就可以讀取這些3個值是這樣的:

int a, b, c; 
fscanf(fp, "%x %x %x", &a, &b, &c); // a = 0xff3c, b = 0x5a, c = 0xcb2d 
+0

你沒有得到一個錯誤? – Glove

+0

C的問題是它不像C++那樣安全。你遇到的錯誤可能是許多問題之一。 1.你正在告訴函數它期望一個DECIMAL整數('%d'),但它實際上是十六進制的並且可以包含字母(af)2.'ProcTable [i] .processPriority'不是一個整數3.'ProcTable [i] .processPriority'是一個整數,但你沒有取它的地址('&') – Marlon

+0

@biz:這不應該給錯誤。如果您遇到錯誤,請修改您的問題以包含您的*精確*代碼,以及您收到的錯誤消息/行爲。 –

3

fscanffprintf字符串中使用%x格式說明符。

2

正如馬龍上面說:

int a, b, c; 
fscanf(fp, "%x %x %x", &a, &b, &c); 

要打印回爲十六進制字符串

fprintf(fp, "%x %x %x", a, b, c); 

我認爲你可能會感到困惑的方式,電腦賣場int類型的變量。它們不存儲在基數10中。它們以二進制形式存儲,我相信你知道。這意味着將一個十六進制值分配給int沒有什麼特別之處。它不會以任何不同的方式存儲。使用%x只是表明你希望程序明白你給它的數字是一個十六進制數(例如,它知道把字符串「10」存儲爲10000(2)而不是1010(2)。與輸出的東西。如果你的變量a具有二進制10000(2),並在打印使用%x,程序知道輸出應爲10。如果你使用%d,它知道輸出應該16

+0

它很好的解釋謝謝! – Glove

相關問題