給定宣告:
char a [] = "hello world";
int i = 0;
天吶,我們親愛的趙4老柿竟然寫出這樣的代碼:
printf("0x%02X ",(unsigned char)a[i]);你能相信嗎!反正我們是震驚了!!
uj5u.com熱心網友回復:
沒什么問題 怎么了uj5u.com熱心網友回復:
親愛的趙4老柿,好不容易來一趟CSDN,你就讓我揭一回你的短吧,啊哈哈哈。
上面那條陳述句,你寫成
printf ("0x%02X ", a [i]);或者寫成
printf ("0x%02X ", (unsigned int) a [i]);編譯器都會感謝你。然而你寫成
printf ("0x%02X ", (unsigned char) a [i]);編譯器會覺得你給它找麻煩。
%x和%X要求對應的實參為 unsigned int型別;運算式a[i]的型別是char,它的值會自動轉換成int傳給printf;你不轉是這個結果,你要轉也應該轉成unsigned int而不是unsigned char,因為轉換到unsigned char之后,編譯器還是要把它轉換為 int;轉了一個彎,你圖一啥捏?唵,老趙?今天一直在跟趙老師開玩笑,希望趙老濕不要生氣。
uj5u.com熱心網友回復:
這里我認為你弄錯了char 直接轉換到unsigned int
如果符號位是1 可能填充的是1
轉換為unsigned char 再轉換到 unsigned int 就沒這問題
備注 所以我一般不是通過型別轉換處理這種需求 用位運算比較合適
uj5u.com熱心網友回復:
哦 糾正一下轉換到 unsigned char 再轉換到 int (前面寫 unsigned int 弄錯了)
確保填充的都是0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247773.html
標籤:C語言
