2011-03-11 105 views

回答

6

他們是隱式轉換...

int x = 65; 
char c = x; // 'A' 
putchar(x); 
printf("%c", x); 
char asciiz[] = { 65, 32, 66, 32, 67, 0 }; 

你可以用例如做明確(char)65,在C++中特別有用,其中重載和模板使寫代碼的行爲有所不同,具體取決於常用類型。

如果你實際上意味着得到一個數的(可能是多重)字符表示,那麼你就可以用printf(「%d」,X)將其打印到標準輸出,或:

char buffer[16]; // biggest int is 4 billion so ~10 chars, round up for safety 
sprintf(buffer, "%d", x); 
// say x was 128, buffer now contains [0] = '1', [1] = '2', [2] = '8', [3] = NUL. 
1

簡單的答案是:

(char)my_int; 

但是,一個簡單的char可能不是你真正想要的東西。在C中,有char','unsigned char'和「plain」char。不幸的是,如果一個普通的char是有符號或無符號的,它就是實現定義的。所以,如果你打算在一個很重要的環境中使用down-cast整數,一定要選擇正確的字符類型。

+0

它給出了一些奇怪的字符... – erogol 2011-03-11 09:41:11

+1

好吧,備份,你想要做什麼?例如,如果您有一個整數65,並將其轉換爲字符,它仍然是65,但它會打印爲A,因爲A的ascii代碼是65.如果要打印「65」那麼你應該把它作爲一個整數來打印,即當使用'printf'時使用'%d'。 – Lindydancer 2011-03-11 09:47:22

0

如果你指得到的整數位1,2,3,4,5,6,7,8,9和0炭表示,則可以簡單地做這樣的:

char ToChar(int value) 
{ 
    assert(value >= 0 && value <= 9); 
    return '0' + value; 
} 

如果你想包括十六進制數字混進去,你可以這樣做:

char ToChar(int value) 
{ 
    assert(value >= 0 && value <= 15); 
    return value < 10 ? '0' + value : 'a' + value - 10; 
} 

這隻會工作,雖然,如果角色是從「0」字符集責令「9」。我從來沒有聽說過一個沒有這個屬性的字符集。

+0

''0'到''9'在C中保證是連續的。''''到''z'通常是,但是沒有保證。 – 2011-03-11 09:53:20