看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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