Abzz 2020-12-03 15:04 采纳率: 57.1%
浏览 116
已采纳

有没有大佬解释下“自定义文件格式”原理啊?小弟感激不尽!!!

有没有大佬解释下“自定义文件格式”原理啊?小弟感激不尽!!!

  • 写回答

8条回答 默认 最新

  • include_iostream_ 2020-12-04 16:59
    关注

    计算机中,包括数据类型在内的元信息并不随附数据保存。同样一个64位的数据0x8123456789012345,可能是unsigned long long,可能是long long,也可能是double,还有可能是自定义结构体。那么,程序运行时怎么分辨呢?答案非常简单:程序代码会负责解读数据,数据类型本质上只决定了数据如何被解析和运算,而并不会赋予存储时的意义。如果你强行把1.234塞进一个8字节的结构体,程序不会觉得有任何问题,因为对程序而言,重要的是数据如何被解读,而数据存储这件事与它如何被解读是没有任何关系的。在计算机通信中,我们管解读方式叫做“协议”(protocol),处理数据的程序必须知道协议格式和含义才能处理数据,否则数据在它眼里和一串乱码没有任何区别。文件就是这样一种数据,没有标识的话它和乱码没有任何区别。文件中用于识别类型的信息主要有两种,一种是文件扩展名(extension),是文件名的一部分;另一种是文件头(header)中的幻数(magic number),它是文件的“协议”中的一部分(在这里,“协议”并不是正式名称,只是方便类比而已。实际上,我们简单地称之为“格式”即format)。文件名大家都懂就不多说了,幻数是文件开头附近用于标识文件实际类型的一串数,例如,任何正常的jpg图片都有个0xFFD8FF。并不是所有文件都有幻数,很多txt文件就没有;当幻数与扩展名指示的文件类型不一致时,应当以幻数为准。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试