fread不能讀完整個文件

  今天在寫資源管理器的時候,加載音頻文件,發現文件頭的格式對不上,剛開始覺得是讀頭的邏輯出錯了,在vs下用Debug的Memory和用hex格式對比發現,最終是發現內存沒有加載全只是加載了一部分的緣由,是讀到了0x1ahtml

  google了一下,發現本身打開文件的方式不對,我使用的是:windows

FILE* file = fopen( path, "r");

  而正確的應該是:google

FILE* file = fopen( path, "rb");

  爲何是這樣子呢,由於若是用"r"模式打開,字符是有意義的,只要是讀到0x1A時,fread就認爲是結束。爲何是0x1a,而不是別的,寫個小例子輸出一下ctrl + z的ascii碼值發現,它的ascii碼值就是26在windows上(Linux是掛起任務)。spa

  但你以"rb"讀到文本,系統IO只會認爲它是文本而非別的東西。插件

  推薦一個HEX查看器,當資源和內存數據不符的時候,Hex格式的查看顯得比較重要了。Notepad++的一個插件,Hex Editor.htm

  解壓縮後把HexEditor.dll文件複製到安裝目錄(如:Dir\Notepad++\plugins),退出NotePad++從新打開便可!須要以十六進制顯示時,點擊菜單的:【插件】-【Hex-Editor】-【View in Hex】便可。由於是在sf上,FQ比較麻煩,直接博客園的下載地址:http://files.cnblogs.com/singmelody/HexEditor_0_9_5_UNI_dll.zipblog

 

reference: ip

1.http://blog.sina.com.cn/s/blog_4e0987310101o9xl.html內存

2.http://shandian.biz/490.htmlci

相關文章
相關標籤/搜索