<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://calcwiki.org/index.php?action=history&amp;feed=atom&amp;title=User%3AArnie97%2FOff_Topic</id>
	<title>User:Arnie97/Off Topic - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://calcwiki.org/index.php?action=history&amp;feed=atom&amp;title=User%3AArnie97%2FOff_Topic"/>
	<link rel="alternate" type="text/html" href="https://calcwiki.org/index.php?title=User:Arnie97/Off_Topic&amp;action=history"/>
	<updated>2026-04-06T12:18:42Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://calcwiki.org/index.php?title=User:Arnie97/Off_Topic&amp;diff=8382&amp;oldid=prev</id>
		<title>Arnie97：​析出离题内容</title>
		<link rel="alternate" type="text/html" href="https://calcwiki.org/index.php?title=User:Arnie97/Off_Topic&amp;diff=8382&amp;oldid=prev"/>
		<updated>2017-06-01T09:17:32Z</updated>

		<summary type="html">&lt;p&gt;析出离题内容&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== 数据对象的内部表示（变量） ===&lt;br /&gt;
数据在内存中以不同的方式（&amp;#039;&amp;#039;&amp;#039;数据结构&amp;#039;&amp;#039;&amp;#039;）储存着。这些数据结构当中有顺序的（例如线性表的数组形式），也有非顺序的（例如线性表的链表形式）。&lt;br /&gt;
&lt;br /&gt;
=== 数据对象的外部表示（文件） ===&lt;br /&gt;
为了将数据，尤其是非顺序的数据：&lt;br /&gt;
* 保存于外存（硬盘、光盘、闪存等）的某个文件中以备后用&lt;br /&gt;
* 通过网络等方式共享给另一台计算机&lt;br /&gt;
* 通过串口等方式传送至图形计算器等设备&lt;br /&gt;
&lt;br /&gt;
我们需要将数据编码为字符串（字节流）方能储存或传输，这一编码过程称为&amp;#039;&amp;#039;&amp;#039;序列化（Serialization）&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
=== 变量的类型系统：静态类型与动态类型 ===&lt;br /&gt;
变量是代指数据的名称、符号。&lt;br /&gt;
* 在 C++、Java 等语言中，&amp;#039;&amp;#039;&amp;#039;每个变量均对应一个特定的数据类型&amp;#039;&amp;#039;&amp;#039;，使用前必须声明每个变量的数据类型，这样的类型系统称为&amp;#039;&amp;#039;&amp;#039;静态类型&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
* 在 Haskell 等语言中，虽然很多情况下不需手动声明变量的数据类型，而是通过计算机的&amp;#039;&amp;#039;&amp;#039;自动推导&amp;#039;&amp;#039;&amp;#039;来确定数据类型，但每个变量均有特定的类型——类似 C++ 11 中使用 &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; 的情形——因此同样属于静态类型。&lt;br /&gt;
* 在 Python、JavaScript 等语言中，&amp;#039;&amp;#039;&amp;#039;类型依附于变量中储存的数据本身，数据有类型而变量无类型&amp;#039;&amp;#039;&amp;#039;，这样的类型系统称为&amp;#039;&amp;#039;&amp;#039;动态类型&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
=== 文件的类型判定：扩展名与特征签名 ===&lt;br /&gt;
类比变量，文件名（和路径）是代指文件的符号。对于文件来说，同样有数种不同的方式来记录它的类型，其中就包括：&lt;br /&gt;
* 文件&amp;#039;&amp;#039;&amp;#039;名称&amp;#039;&amp;#039;&amp;#039;的某个特定部分指示一个文件的类型——通常是最后一个小数点后的部分，也就是&amp;#039;&amp;#039;&amp;#039;扩展名（Extension）&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
* 文件&amp;#039;&amp;#039;&amp;#039;内容&amp;#039;&amp;#039;&amp;#039;的某个特定部分，即&amp;#039;&amp;#039;&amp;#039;特征签名（File Signature）&amp;#039;&amp;#039;&amp;#039;指示一个文件的类型——通常是最前面的部分，也就是&amp;#039;&amp;#039;&amp;#039;头部（Header）&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
扩展名最早在 [https://en.wikipedia.org/wiki/CP/M CP/M] 操作系统中被采用，而后又随一脉相承的 DOS 和 Windows 得到了推广；特征签名则在 &amp;lt;span style=&amp;quot;font-variant: small-caps;&amp;quot;&amp;gt;Unix&amp;lt;/span&amp;gt; 中被广泛应用，而后又被 Linux 等操作系统所继承下来。由于两类操作系统均得到了广泛的应用，现实中两种方式常常共存：&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 文件类型 !! 扩展名 !! 特征签名&amp;lt;ref&amp;gt;{{cite web|url=https://en.wikipedia.org/wiki/List_of_file_signatures|title=英文维基百科：文件特征签名列表}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PDF 文档 || pdf || &amp;lt;code&amp;gt;%PDF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ZIP 压缩文件 || zip docx pptx xlsx 等 || &amp;lt;code&amp;gt;PK&amp;lt;/code&amp;gt;（设计者 &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;hil &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039;atz）&lt;br /&gt;
|-&lt;br /&gt;
| RAR 压缩文件 || rar || &amp;lt;code&amp;gt;Rar!&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CAB 压缩文件 || cab || &amp;lt;code&amp;gt;MSCF&amp;lt;/code&amp;gt;（&amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;icro&amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039;oft &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039;abinet &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039;ile）&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/DOS_MZ_executable MZ 可执行文件]&lt;br /&gt;
[https://zh.wikipedia.org/wiki/可移植可执行 PE 可执行文件]&lt;br /&gt;
|| com exe&lt;br /&gt;
exe dll sys ocx cpl scr 等&lt;br /&gt;
|| &amp;lt;code&amp;gt;MZ&amp;lt;/code&amp;gt;（设计者 &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;ark &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039;bikowski）&lt;br /&gt;
（为向下兼容 DOS，PE 文件头部与之相同）&lt;br /&gt;
|-&lt;br /&gt;
| [https://zh.wikipedia.org/wiki/可執行與可鏈接格式 ELF 可执行文件] || 无 || &amp;lt;code&amp;gt;\x7F&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PNG 图片 || png || &amp;lt;code&amp;gt;\x89&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| GIF 图片 || gif || &amp;lt;code&amp;gt;GIF89a&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;GIF87a&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| JPEG 图片 || jpg jpeg || 以 &amp;lt;code&amp;gt;\xFF&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;\xD8&amp;lt;/code&amp;gt;开始，&amp;lt;code&amp;gt;\xFF&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;\xD9&amp;lt;/code&amp;gt; 结束&lt;br /&gt;
|-&lt;br /&gt;
| Midi 音轨 || midi || &amp;lt;code&amp;gt;MThd&amp;lt;/code&amp;gt;（&amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;IDI &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039;rack &amp;#039;&amp;#039;&amp;#039;h&amp;#039;&amp;#039;&amp;#039;ea&amp;#039;&amp;#039;&amp;#039;d&amp;#039;&amp;#039;&amp;#039;er）&lt;br /&gt;
|-&lt;br /&gt;
| Java 字节码 || class || &amp;lt;code&amp;gt;\xCA&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;\xFE&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;\xBA&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;\xBE&amp;lt;/code&amp;gt;，即十六进制 &amp;lt;code&amp;gt;CAFEBABE&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
从上面的例子中可以看出，既有一个扩展名对应多种特征签名的情况（如 GIF 文件），也有多种扩展名对应单一特征签名的情况（如 PE 文件）。当扩展名和特征签名共存时，有时会结合两种因素来决定文件如何解析，更多时候则只选择其中的主要因素来判断文件的类型。例如，将 JPEG 图片的扩展名更改为 png 仍能用多数图片查看器正常打开，说明这些软件仅通过文件内容中的特征签名来判断文件的格式，扩展名无关紧要。&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Arnie97</name></author>
	</entry>
</feed>