[爆卦]unsigned char用法是什麼?優點缺點精華區懶人包

為什麼這篇unsigned char用法鄉民發文收入到精華區:因為在unsigned char用法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者shiengchyi (上班族之朝九晚六?!)看板C_and_CPP標題[問題] printf ...


開發平台(Platform): (Ex: VC++, GCC, Linux, ...)

GCC Linux SUSE
問題(Question):

最近在寫C,碰到大量的unsigned char*,然後又得認命的去看內容兼找錯,
只好利用printf來把內容顯示出來看,不過在一連串意外之後,
我對printf越來越陌生了 Q口Q

先直接看下面的測試程式:

int int01 = 100;
unsigned char *str;
unsigned char *tmp;

str = (unsigned char *)malloc(1);
tmp = (unsigned char *)malloc(2);
sprintf(str,"%d",int01); //將int01的數值利用sprintf餵給str
memcpy(tmp,str,1); //利用memcpy把數值copy給tmp
printf("%d\n",*str); //輸出 49 (神奇的49....不知道哪來的)
printf("%u\n",*str); //輸出 49 (unsigned dec和樓上吻合)
printf("%x\n",*tmp); //輸出 31 (16進位和樓上吻合)
printf("%x\n",*(tmp+1) ); //輸出 0 (第二個byte沒有數值 正確)

想請問大大,要怎麼餵數值給unsigned char*?
輸出49真的讓我有點傻眼,為什麼不是100 >"<

再請問大大,如果我要在unsigned char *str 當中餵入100的二進位(0x1100100)
然後用printf() 顯示出100的話,我該怎麼改?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.71.22
uranusjr:輸出 31 (16進位和樓上吻合) <--- why? 05/17 16:16
uranusjr:一個輸出 tmp 一個輸出 str 為什麼會符合呢 05/17 16:16
uranusjr:啊沒事我漏看一行...XD 05/17 16:17
chchwy:你是不是誤會了sprintf的用法 05/17 16:18
abzxcx:將int01的數值利用sprintf餵給str 何不用下面的方法 05/17 16:18
chchwy:程式結果沒錯,49是'1'這個字元的ASCII Code 05/17 16:18
abzxcx:*(str) = (unsigned char)int01 ; // 範圍內不會爆 05/17 16:18
abzxcx:printf("%d\n",*str); printf("%u\n",*str); 05/17 16:20
abzxcx:以上的用法真的很不建議 05/17 16:20
CCWck:100 只進去了數字1 ascii換回來 剛好是整數49 05/17 16:20
abzxcx:參數是only的一對一 並且每個參數型別要非常一致 05/17 16:21
CCWck:printf("%s\n",*str) 應該會出來數字1吧 05/17 16:21
shiengchyi:所以是....1的ASCII 0.0a 恩 05/17 16:21
abzxcx:printf("%d\n",*str);//意思是告訴compiler將str那邊的 05/17 16:21
shiengchyi:感謝,我了解了 ~"~ 05/17 16:22
abzxcx:一塊記憶體位置的資料當成"整數"來輸出 05/17 16:22
abzxcx:小的生嫩,不足處有請高手補充 ~ 05/17 16:23
※ 編輯: shiengchyi 來自: 60.251.71.22 (05/17 16:30)
purpose:printf 從來就不會顯示變數的原始資料內容,他所印的都是 05/17 16:48
purpose:轉換成字串後的內容,還在測試怎麼寫時,應該用 Debugger 05/17 16:49
purpose:自己觀察記憶體每個位元組、每個位元的內容 05/17 16:50
shiengchyi:恩恩 0.0a 原來是這樣 05/17 17:07
loveme00835:還生嫩勒 XD 好像很好吃 05/17 17:26
abzxcx:\ ( = oo = ) / 05/17 18:18
xatier:版主要開動了? 05/18 07:52
angleevil:怎麼覺得怪怪的 05/18 13:11

你可能也想看看

搜尋相關網站