Bootstrap

“魔数“是怎样工作的?

"魔数"是怎样工作的?

我们经常需要检查某个文件/某块磁盘是否符合我们需要的格式。一般会按照这个文件的完整格式,进行一次全面的分析。

在一个较早的版本,UNIX的可执行文件格式最开头包含一条PDP-11平台上的跳转指令,使得在PDP-11硬件平台上能够正常运行,而在其他平台上,这条指令就是“魔数”(magic number),只能用作文件类型的标识。

Java类文件(编译到字节码)以十六进制0xCAFEBABE 开头

JPEG图片文件以0xFFD8开头,0xFFD9结尾

PDF文件以“%PDF"的ASCII码开头,十六进制25 50 44 46

进行这样的约定之后,我们发现,如果文件开头的”魔数“不符合要求,那么这个文件的格式一定不对。这让我们立刻发现文件损坏或者搞错文件类型的情况。由于不同类型的文件有不同的魔数,当你把JPEG文件当作PDF打开的时候,立即就会出现异常。

下面是一个摇滚乐队和巧克力豆的故事,有助于你理解魔数的作用。

美国著名重金属摇滚乐队Van Halen的演出合同中有此一条:演出后台必须提供M&M巧克力豆,但是绝对不许出现棕色豆。如有违反,根据合同,乐队可以取消演出。实际情形中乐队甚至会借此发飙,砸后台,主办方也只好承担所有经济损失。这一条款长期被媒体用来作为摇滚乐队耍大牌的典型例子,有传言指某次由于主唱在后台发现了棕色M&M豆,大发其飙地砸了后台,造成损失高达八万五千美元(当时是八十年代,八万五千还是不少钱)。Van Halen乐队对此从不回应。

多年以后,主唱David Lee Roth 在自传中揭示了这一无厘头条款的来由:Van Halen 乐队在当时是把大型摇滚现场演唱会推向高校及二/三线地区的先锋,由于常常会遇到没有处理过这种大场面的承办者,因此合同里有大量条款来确认演出承办者把场地,器材,工作人员安排等等细节都严格按要求准备好。合同里有成章成章的技术细节,包括场地的承重要求,各类出入口的宽度,电源要求,以至于插座的数量和插座之间的间隔。因此,乐队把棕色豆条款夹带在合同里,以确认承办方是否“仔仔细细阅读了所有条款”。David说:“如果我在后台的M&M里找到棕色豆,我就会立马知道承办方(十有八九)是没好好读完全部技术要求,我们肯定会碰上技术问题。某些技术问题绝对会毁了这场演出,甚至害死人。”

回到上文,八万五千美元的损失是怎么来的?某次在某大学体育场办演唱会,主唱来到后台,发现了棕色M&M豆,当即发飙,砸了后台化妆室,财物损坏大概值一万二。但实际上更糟糕的是,主办方没有细读演出演出场地的承重要求,结果整个舞台压垮(似乎是压穿)了体育场地面,损失高达八万多。

事后媒体的报道是,由于主唱看到棕色M&M豆后发飙砸了后台,造成高达八万五的损失…

原文地址

;