2014-04-05 43 views
0

我試圖將一個整數保存爲一個字符。將int保存爲char?

char i = 80; 
printf("0x%x", i); 

上述代碼顯示0x50(1字節)。但是,如果該值高於128,則會打印一個4字節的值。

char i = 130; 
printf("0x%x", i); // this prints 0xffffff82 

如何可以存儲整數值作爲只是1個字節,如果該值大於128(印刷只是82,而不是在第二個例子ffffff82)更大?

+3

使用'unsigned char i = 130;' – Marian

+0

'%x'格式說明符將打印一個十六進制值。我相信'i'正在被提升,所以你正在打印一個整數,而不是一個8位八位字節。這就是爲什麼你看到'0xffffff82'。你也必須擔心'int' - >'char'截斷(在一般情況下)。 – jww

回答

1

這是對char類型進行簽名的系統上的預期行爲:char的負值得到的符號擴展爲int的大小。

如果您想打印的後八位,你可以用0xFF掩蓋,就像這樣:

Demo on ideone

另一種方法是使用unsigned char。這將避免8位數字的符號擴展,最高有效位設置爲1