魔数 (magic number) vs file 命令的工作原理

(一)很多类型的文件,其起始的几个字节的内容是固定的(或有意义填充的 )。

根据这几个字节的内容可以确定文件的类型,因此这几个字节的内容被称为魔数(magic number),如以

#!/bin/bash

开头的文件是 shell 脚本,则!/bin/bash就是魔数。同样地

  1. FreeBSD上ELF文件的magic number 就是文件的前4个字节,依次为“7f 45 4c 46”, 对应的 ASCII 字符为 "^ELF"
  2. tar文件的magic number 是从第257各个字节起为"ustar"

       因此,Unix中命令 'file' 识别文件类型 [2]。

 

  (二) 此外,在一些程序代码中,程序员常常将在代码中出现但没有解释的数字常量或字符串称为魔数(magic number)或魔字符串

复制代码
public int getSalary(String title, int grade){
    if("Programmer".equals(title))
      return grade*500+700;
    else if("Tester".equals(title))
      return grade*500+800;
    else if("Analyst".equals(title))
      return grade*800+1000;
}
View Code
复制代码

 在以上代码中,“Programmer”,"Tester"和"Analyst"是所为的魔字符串(Magic String)。而 500,700,800 和 1000 就是所为的  魔数(magic number)。

应用程序魔数/魔字符串的弊端:

Programmer 这样的单词散步在多个方法中,一个大小写的笔误就会产生 bug. 另外,像500这样的魔数还会影响程序可读性。魔数在常数更新的时候,很麻烦,要一个个的update。为了避免这些问题, 将 magic string/ number 定义成 constant 比较好。程序员要切记:减少代码中的魔数

参考(Reference) 

[1] https://baike.so.com/doc/9871818-10218881.html

[2] https://shapeshed.com/unix-file/#how-to-determine-the-file-type-of-a-file

posted on   猪伯  阅读(1638)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示