2015-11-05 105 views
-4

我想打印十六進制int值爲%d。十六進制表示

當值被寫入爲十六進制它不是一個問題:

#include <stdio.h> 

    int main(void) { 
     int x=0x18; 
     int y=0xAB; 
     printf("%d %d", x, y); 

     return 0; 
    } 

但是...我如何可以打印時,這是十進制值?

我想是這樣的:

  1. 值在小數:

X = 551更改爲十六進制X = 227和打印爲%d?

在本練習中,我必須將十六進制整數打印爲%d。

希望我寫這個乾淨。 :)

問候,

+2

'x'和'y'不是 「十六進制整數」。他們只是整數。 –

+1

閱讀printf的手冊頁 –

+0

您是否想將*轉換爲十六進制表示形式,然後打印出結果字符串,或者您是否要求使用什麼格式說明符在十六進制中打印int?如果前者 - 實現一個基本轉換算法。如果以後 - 閱讀手冊(或在Google上花費30秒)。無論哪種情況---我不知道「打印使用%d」是什麼意思,因爲該說明符以十進制打印,而不是十六進制打印。如果你構造了十六進制字符串,那麼你需要'%s'將它顯示爲一個字符串。 –

回答

0

奇數請求:打印在十進制的值,使用"%x"

void dec_print_with_x(unsigned x) { 
    if (x >= 10) dec_print_with_x(x/10); 
    printf("%x", x%10); 
} 

int main (void) 
{ 
    dec_print_with_x(0x227); 
    return 0; 
} 

輸出:

551 

爲了清楚起見,一個可變xint x = 0x227;int x = 551;既不是,十進制,十六進制二進制也不。它有一個整數以某種方式編碼並存儲在某處 - 最有可能是2's complement中固定寬度的比特模式。

0x180xAB0x227是文本即和"551"所述源代碼的一部分作爲輸出的一部分。這些字符序列表示以十六進制或十進制表示的值。

0

如果你這樣做:

int x = 898; 
x = 0x382; 
printf(" x = %d", x); 

輸出將是:

x = 898 

在你的代碼,8980x382是代表相同數量的兩種不同的方式。它們的存儲方式完全相同。

如果您使用%d或十六進制格式(如果使用%x),printf所做的是採用該數字的內部表示並以十進制格式打印。你如何做任務並不重要。

看它的另一種方式 - 此代碼:

int x = 898; 
int y = 0x382; 
if (x == y) { 
    printf("x and y are equal\n"); 
} else { 
    printf("x and y are not equal\n"); 
} 

輸出:

x and y are equal