[問題] fread and unsigned char and >>

看板C_and_CPP (C/C++)作者 (上班族之朝九晚六?!)時間15年前 (2011/05/16 16:15), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串1/1
開發平台(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

05/16 16:18, , 1F
問題一:放在 buf[0] 的地方 (第一個byte)
05/16 16:18, 1F

05/16 16:18, , 2F
問題二:printf沒辦法直接顯示binary,要自己寫
05/16 16:18, 2F

05/16 16:20, , 3F
buf[0] 所以是前8個bits囉
05/16 16:20, 3F

05/16 16:27, , 4F
用 codeblocks 下中斷點,就可以觀察 buf 的記憶體內容
05/16 16:27, 4F
※ 編輯: shiengchyi 來自: 60.251.71.22 (05/16 16:40)

05/16 16:45, , 5F
QQ 是不是修到誰的推文了?!
05/16 16:45, 5F

05/16 17:40, , 6F
寫成 *buf >>= 4; printf("%u", *buf); 試試
05/16 17:40, 6F

05/16 17:55, , 7F
恩....開始懷疑是不是資料本身就有問題了 QQ
05/16 17:55, 7F

05/16 17:56, , 8F
james大的寫法,跟我的寫法做出來的結果一樣
05/16 17:56, 8F

05/16 17:58, , 9F
.....會一樣也挺神奇的
05/16 17:58, 9F

05/16 18:02, , 10F
阿哩 我眼殘 *__* printf("%u", *buf); 沒注意這個
05/16 18:02, 10F

05/16 18:05, , 11F
哦哦哦 結果出來了 感謝james大
05/16 18:05, 11F
文章代碼(AID): #1DqDqvch (C_and_CPP)
文章代碼(AID): #1DqDqvch (C_and_CPP)