zoukankan      html  css  js  c++  java
  • fread不能读完整个文件

      今天在写资源管理器的时候,加载音频文件,发现文件头的格式对不上,刚开始以为是读头的逻辑出错了,在vs下用Debug的Memory和用hex格式对比发现,最终是发现内存没有加载全只是加载了一部分的原因,是读到了0x1a

      google了一下,发现自己打开文件的方式不对,我使用的是:

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

      而正确的应该是:

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

      为什么是这样子呢,因为如果用"r"模式打开,字符是有意义的,只要是读到0x1A时,fread就认为是结束。为什么是0x1a,而不是别的,写个小例子输出一下ctrl + z的ascii码值发现,它的ascii码值就是26在windows上(Linux是挂起任务)。

      但你以"rb"读到文本,系统IO只会认为它是文本而非别的东西。

      推荐一个HEX查看器,当资源和内存数据不符的时候,Hex格式的查看显得比较重要了。Notepad++的一个插件,Hex Editor.

      解压缩后把HexEditor.dll文件复制到安装目录(如:DirNotepad++plugins),退出NotePad++重新打开即可!需要以十六进制显示时,点击菜单的:【插件】-【Hex-Editor】-【View in Hex】即可。因为是在sf上,FQ比较麻烦,直接博客园的下载地址:https://files.cnblogs.com/singmelody/HexEditor_0_9_5_UNI_dll.zip

     

    reference: 

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

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

  • 相关阅读:
    字典树(Trie)的学习笔记
    kmp学习笔记
    NOIP PJ游记
    Hash学习笔记
    神奇的差分法(内附树状数组的一点扩展)
    DLX算法一览
    A*与IDA*的奇妙之旅
    HDU_2553——n皇后问题,作弊
    HDU_2035——求A^B的最后三位数
    HDU_2034——集合A-B
  • 原文地址:https://www.cnblogs.com/singmelody/p/3789041.html
Copyright © 2011-2022 走看看