• 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

  • 相关阅读:
    【leetcode刷题笔记】Best Time to Buy and Sell Stock II
    【leetcode刷题笔记】Reverse Integer
    JAVA中的NIO(二)
    标准I/O
    margin的理解
    JAVA中的NIO(一)
    IO模型
    linux网络命令
    linux用户管理命令
    linux中的帮助命令
  • 原文地址:https://www.cnblogs.com/singmelody/p/3789041.html
Copyright © 2020-2023  润新知