2013-08-25 66 views
1

我使用XLookupString將一個關鍵事件映射到ASCII字符串,keysym和ComposeStatus。在位操作中使用'char'變量

int XLookupString(event_structure, buffer_return, bytes_buffer, keysym_return, status_in_out) 

XKeyEvent *event_structure; 
char *buffer_return; /* Returns the resulting string (not NULL-terminated). Returned value of the function is the length of the string. */ 
int bytes_buffer; 
KeySym *keysym_return; 
XComposeStatus *status_in_out; 

這裏是我的代碼:

char mykey_string; 
int arg = 0; 

------------------------------------------------------------ 

    case KeyPress: 
     XLookupString(&event.xkey, &mykey_string, 1, 0, 0); 
     arg |= mykey_string; 

但使用位操作「字符」變量,符號擴展會產生意想不到的效果。 我可以防止這個?

感謝

+3

從本質上講,位運算是基於無符號整數。所以建議你應該使用unsigned char和unsigned int來代替。順便說一句,VC++默認將char視爲未簽名,您可以通過編譯器選項指定char類型的符號。 – xmllmx

回答

0

char可以是signedunsigned所以如果你需要unsigned char應明確指定,它清楚那些讀你的代碼你的意圖,而不是依賴於編譯器設置。

C99標準草案的相關部分是從6.2.5類型第15段

三種類型Char,符號的字符,和unsigned char統稱 字符類型。實現應定義字符具有相同的範圍, 表示,和行爲,無論是簽署char或unsigned char