2010-06-27 201 views
2

我想將十進制整數轉換爲十六進制。我在網上做了很多搜索,並找到了很多方法來做到這一點。但是,我發現的每種方式都轉換爲字符串;例如,我可以將100轉換爲「64」。這不是我需要做的。我希望能夠將100轉換爲'0x64',這完全是另一回事。出於某種原因,我懷疑答案是非常簡單的,但我似乎無法找到/記住它。我用C語言編寫,只是爲了澄清。任何援助或想法將不勝感激。如何將十進制整數轉換爲單個十六進制字符? (C)

謝謝,在C語言 哈桑

+0

我傷心地承認這一點,但我寫了一系列的做你正在通過解析十六進制字符串,其數量相當於描述的方法。我需要它來創建一個圖形計算器來檢查從一些舊的不明顯格式到當前/常見IEEE格式的浮點轉換。我會分享代碼,但它是用C#編寫的。 – 2010-06-28 00:43:38

回答

5

您不能將數字從十進制「轉換」爲十六進制,因爲它是一個數字(通常在內存中存儲爲two's complement)。在所有可能的positional systems中的所有相同編號的表示生活在數字線上完全相同的點。你可以儘管打印它在不同的基地:

int num = 15; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 

num = 0xf; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 

num = 017; 
printf("%d", num); /* prints 15 */ 
printf("0x%x", num); /* prints 0xf */ 
printf("0%o", num); /* prints 017 (octal) */ 
5

整型真的不基地。當你說:

int a = 100; 
int b = 0x64; 

...都ab具有相同的值。談論將a轉換爲十六進制(或將b轉換爲十進制)沒有任何意義。

0

嗯,

int i = 100; 
char c = i; // c now has the value 0x64 (aka decimal 100) 

實在是沒有其他任何你需要做的,除了確保i不超過255

數字基地大才真正開始發揮作用時打印或以其他方式向人類顯示數字。就內存中的數字而言,100是0x64,0144是1100100.它們都是相同的值,所以它們全都由相同的一組位表示。

這就像問你如何顯示西班牙語的綠色。無論您使用何種語言,綠色都是綠色的。只有當你試圖想出一種將它寫成單詞的方式時,你必須考慮你將使用哪種語言。所以它與數字和決定你將使用哪個基地。

0

100十進制爲0x64(十六進制),不需要「轉換」。整數的基數只是解釋的問題。

相關問題