2011-02-25 65 views
0

我有一個無符號的字符,我需要在printf之前轉換爲字符。因此,示例代碼是這樣的:C/C++鑄造的問題,無符號char到字符

unsigned char y = sample.result; 
    char x = (char)y; 
    printf("%c \n", x); 

然而,printf不打印x但如果我使用COUT,x打印correctly.I不知道爲什麼這樣。如何將一個unsigned char變量轉換爲char?我做錯了嗎? reinterpret_casting僅用於指針,而我的指針不是。提前致謝。

編輯:命令提示符返回給我一個笑臉「☺」的sample.result的值與unsigned char 1相對應。並且顯然netbeans無法打印這個笑臉。我不知道它是如何翻譯成笑臉的。任何幫助?編輯2:我只是意識到你不能打印字符x = 1;我只是意識到你不能打印字符x = 1;我只是意識到你不能打印字符x = 1;我只是意識到你不能打印字符x = 2;我只是意識到你不能打印字符x = 1;在netbeans中,並在命令提示符下打印,產生笑臉。原因是什麼? :(

+2

你有什麼編寫和適合我的。你期望得到什麼,你會得到什麼? – GreenMatt 2011-02-25 04:20:04

+2

也適用於我,無論是否有演員。 'sample.result'中你碰巧有一個高於127的值嗎? – 2011-02-25 04:21:53

+0

如果你想使用一個醜陋的演員(醜陋的好方法!:),那麼我相信static_cast是你正在尋找的。它可能不會解決你的問題(我相信這個問題必須要做/卡爾的評論),但是這個工作是最接近的。 – 2011-02-25 04:37:38

回答

0

如果char x = 1並且您希望打印出1,則需要在格式說明符中使用%d而不是%c%c打印數字的ASCII representation,對於1是一個稱爲「標題開始」的不可打印字符。

0

嘗試使xint代替char,看看是否能工作。ç規則所需的所有字符參數轉換成int,並printf是一個C函數。

+0

「C規則要求將所有char參數轉換爲int」什麼規則? – stefan 2011-02-25 04:50:05

0

我沒有信心這個答案,但我只是寫了編譯和打印字母A,而不鑄造無符號的字符回CHAR一個簡單的測試程序

#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    printf("%c\n",c); 
    return 0; 
} 

鑄造直接還曾:

#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    printf("%c\n",(char)c); 
    return 0; 
} 

做它自己的方式也工作了......

#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    char d = (char)c; 
    printf("%c\n",d); 
    return 0; 
} 

所以我認爲我做錯了什麼,現在。或者也許別的東西是你的問題?

+0

那麼最後的代碼不會編譯,所以你必須有一個神奇的編譯器;-) – stefan 2011-02-25 04:50:50

+0

糟糕!忘記%c之前的報價。固定。 – theseankelly 2011-02-25 12:58:08

0

%c轉換爲printf只適用於基本字符集中的字符。看起來你有一個想要打印的擴展字符,所以你必須使用適當的工具。其類型爲wchar_t,打印格式爲%lc。但要小心這取決於很多你的執行環境,locale設置和類似的東西。

而且BTW在許多情況下,狹窄的類型,如char只是轉換爲intunsigned,所以沒有必要投它,實際上比你的標題等提出您的問題已經沒有太大的做鑄造。

0

在這裏轉換

的方程的算法char c爲unsigned char uc

return (c>127) ? (unsigned char)(-(256 + c)) : (unsigned char)c; 

算法的簽名ucchar c

return (uc < 0) ? (char)(256-(char)abs(uc)) : (char)uc;