2012-11-28 37 views
0

我只是想知道,如果下面是int轉換成顯示爲一個char轉換一個int到char用printf

#include <stdio.h> 

int main() 
{ 
    int x = 500; 
    printf("%hhd\n", x); 
} 

此外,從上述我不知道我應該做到以下幾點,以正確的方式顯示字符的值。

#include <stdio.h> 

int main() 
{ 
    char c = 'a'; 
    printf("%hhd\n", c); 
} 

或者只是printf("%d\n", c);好嗎?所以,基本上我試圖通過printf輸出整數的第一個字節而不進行任何轉換。

回答

4

使用%hhd在你的第一個例子迫使C99兼容printf()打印之前將它傳遞給charint轉換。根據您的角色是有符號還是無符號,您可能會看到244或-12作爲打印值。這是否是「正確」打印方式是值得商榷的;很可能不是。打印字符的正常方法是使用%c。一個問題是什麼500應該表示爲一個字符;其數值超出範圍(在幾乎所有平臺上)爲char,signed charunsigned char類型。如果它是一個Unicode字符或其他寬字符值,那麼您可能需要使用寬字符格式變體 - wprintf()

你的第二個例子使用%c格式和一個普通的char'a'是很好的表現和傳統。這將打印字母'a'。如果你使用%hhd,它也會工作,通常會打印97(你必須在一臺不尋常的電腦上才能獲得不同的價值)。

+0

@Johathan:我不想用'%C'打印的字符,但整數的第一個字節的值。 – user963241

+0

@ user963241'x&0xFF'?或者掩飾也是禁止的? –

+0

@DanielFischer:是的,那將是一種方法。我想知道是否可以使用'printf'來處理轉換。 – user963241

1
#include <stdio.h> 

int main() 
{ 
    int x = 500; 
    printf("%hhu\n", x); 
} 

這將打印244

500 = 00000001 11110100

244 = 11110100

+0

雖然這可行,但通常最好能夠非常清楚代碼的意圖。我通常鼓勵使用顯式轉換,而不是讓printf()自動處理格式轉換。 – DevNull

+0

我應該補充一點,像PC-Lint這樣的工具會發現這個錯誤。 – DevNull