作者shiengchyi (上班族之朝九晚六?!)
看板C_and_CPP
標題[問題] fread and unsigned char and >>
時間Mon May 16 16:15:50 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Compiler: GNU GCC
OS : Linux SUSE
CPU : Intel 64bits
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
問題是這樣子的,我宣告了一個unsigned char*,然後搭配fread,
從檔案當中讀取binary data,
不過因為還要做一些處理,所以unsigned char* 的空間配置的比讀出的資料大,
大概的程式碼如下:
unsigned char *buf;
buf = (unsigned char *)malloc(2); //配置2 bytes的空間
fread(buf, 1, 1, binFile); //從binFile當中讀出1 byte到 buf
問題一:讀出的資料是放在buf的第一個byte,還是第二個byte?
問題二:小弟該怎麼樣才能夠以Binary的方式顯示 buf的內容(使用printf顯示)?
以上兩個問題有請大大解答,感謝~
看來小弟我對bitwise opterator的認知有錯誤 >"<
其實接下來要做的處理是 >> 4,也就是說將buf的內容往右移4個bits,
程式碼如下:
*buf = (unsigned char)((unsigned int)buf >> 4);
但是小弟使用
printf("%u",buf);
去看結果,發現有沒有位移的內容都一樣,難道說不這樣子使用嗎??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.71.22
→ james732:問題一:放在 buf[0] 的地方 (第一個byte) 05/16 16:18
→ james732:問題二:printf沒辦法直接顯示binary,要自己寫 05/16 16:18
→ shiengchyi:buf[0] 所以是前8個bits囉 05/16 16:20
推 purpose:用 codeblocks 下中斷點,就可以觀察 buf 的記憶體內容 05/16 16:27
※ 編輯: shiengchyi 來自: 60.251.71.22 (05/16 16:40)
→ shiengchyi:QQ 是不是修到誰的推文了?! 05/16 16:45
→ james732:寫成 *buf >>= 4; printf("%u", *buf); 試試 05/16 17:40
→ shiengchyi:恩....開始懷疑是不是資料本身就有問題了 QQ 05/16 17:55
→ shiengchyi:james大的寫法,跟我的寫法做出來的結果一樣 05/16 17:56
→ james732:.....會一樣也挺神奇的 05/16 17:58
→ shiengchyi:阿哩 我眼殘 *__* printf("%u", *buf); 沒注意這個 05/16 18:02
→ shiengchyi:哦哦哦 結果出來了 感謝james大 05/16 18:05