Magic Number魔数是什么_crc magic number_2er013的博客-程序员宅基地

技术标签: magic number  编程  日常记录  

在网上查magic number的相关介绍的时候,看到很多人的博客中说magic number之所以叫magic number,就是因为我们并不知道它有什么含义。。。


最后看了知乎上的回答:

Magic number一般是指硬写到代码里的整数常量,数值是程序员自己任意设置的,其他人并不知道数值有什么具体意义(可能过一段时间,编程者本人也忘了其具体含义了。。。),表示不明觉厉,就称作magic number。

举了例子:

ELF文件头会写入一个magic number,检查这个数和自己预想的是否一致可以判断文件是否损坏。
在缓冲区数组旁放一个magic number(称作canary金丝雀),通过检查是否一致可检测缓冲区溢出攻击。


另外维基百科上提到了很多含有magic number的文件格式:

1. 一些图像文件中存在的魔数。比如,bmp文件中的'BM',JPEG/JFIF中的'JFIF',等等。
2. 某些格式的声音、视频文件中存在中的魔数。
3. PE文件、ELF文件中存在的魔数。
4. 各种文本编码中的BOM也可以看做魔数。比如UTF-8、UTF-16、UTF-32的BOM。

此外,Linux中的file命令,是根据文件中的魔数来判断文件类型,这要优于使用文件后缀来进行判断。(似乎是magic number的另一个用处)

对于知乎上回答的例子,magic number就是对你要处理的一段数据,最初进行的一个粗略判断。主要是怕处理了半天,原来输入是段垃圾,浪费自己时间,甚至把自己程序搞奔溃。你可以认为,magic number读到是对的,你有就有99%的信心,这个数据应该不是垃圾,值得分析。但是真要保证这个数据是99.9999999%正确的,恐怕还是要CRC甚至数字签名才行。


参考:https://www.zhihu.com/question/22018894

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/abcdyzhang/article/details/56331492

智能推荐

Oracle Database 12c [INS-30131] 错误的解决方法_進擊的胖蛇的博客-程序员宅基地

1. 先搞好c$ share的问题 (参看这里 http://www.yunvn.com/thread-9044-1-1.html)2. 测试一下 c$ share 是否成功. 方法是在cmd里打net use \\localhost\c$失败会是这样子…:System error 53 has occurred.The network path was not found.

nginx: [emerg] CreateFile() “D:\项目资料\nginx-1.12.2/conf/nginx.conf“ failed (1113: No mapping for t_最小的帆也能远航的博客-程序员宅基地

安装nginx报错在安装nginx的过程中,出现了这样的一个问题:nginx: [emerg] CreateFile() “D:\项目资料\nginx-1.12.2/conf/nginx.conf” failed (1113: No mapping for t安装的目录中出现了中文,所以换一个没有中文路径的文件安装就可以了...

springboot前后端分离跨域问题之Request header参数取不到-程序员宅基地

背景:前后端分离项目,前端vue,后端springboot,本地调试时设置了跨域处理,前端生成的uuid后端从header里面取不到。解决办法:如下是允许跨域,设置corsConfiguration.addExposedHeader("uuid"); 放行uuid参数,这样后端就可以获取到了。@Configurationpublic class CorsConfig { private CorsConfiguration buildConfig() { CorsCon.

图解排序算法(三)之堆排序_学习使我可乐的博客-程序员宅基地

预备知识堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆  堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一...

Android DialogFragment fullscreen 解决方法_ending0421的博客-程序员宅基地

关键代码@Override public Dialog onCreateDialog( Bundle savedInstanceState ) {final Dialog dialog = new Dialog( getActivity() ); dialog.requestWindowFeature( Window.FEATURE_NO_TITLE );d

P03: 多重背包问题_鹿海园的博客-程序员宅基地

题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种物品恰放入一个容量为v的背

随便推点

游戏引擎架构 阅读笔记_ArtemisiaW的博客-程序员宅基地

游戏引擎架构 阅读笔记导论游戏团队结构工程师(engineer)运行时程序员(runtime programmer)工具程序员(tool programmer)艺术家(artist)概念艺术家(concept artist)三维建模师(3D modeler)前景建模师(foreground modeler)背景建模师(background modeler)纹理艺术家(texture artist)灯光师(lighting artist)动画师(animator)动画捕捉演员(motion capture a

17、简单的企业人事管理系统(ssh)_企业人事管理系统api_yungcs_的博客-程序员宅基地

–声明,本博客仅本人用于学习笔记 三大框架: Struts框架 1. params拦截器: 请求数据封装 2. 类型转换/数据处理 3. struts配置 4. 文件上传/下载/国际化处理 5. 数据效验/拦截器 6. Ognl表达式 7. 数据回显/模型驱动/防止表单重复提交Hibernate框架 1. Api简介_企业人事管理系统api

金马赛记 | 畅跑一场马拉松,纪念一段青葱岁月_云水木石的博客-程序员宅基地

跑完2021年苏州金鸡湖半程马拉松,我在朋友圈里写下这样一句话:出走二十载,归来不少年。畅跑一场马拉松,纪念一段青葱岁月!时间如同白驹过隙,算算我从苏州离开,回武汉读书,已经过去了整整二十...

C#——文件\文件夹操作_file.initialdirectory_Vector_LW的博客-程序员宅基地

打开文件夹 OpenFileDialog openFileDialog=new OpenFileDialog(); openFileDialog.InitialDirectory="c:\\";//注意这里写路径时要用c:\\而不是c:\ openFileDialog.Filter="文本文件|*.*|C#文件|*.cs|所有文件|*.*"; openFileDialog.RestoreDirectory=true; openFileDialog.FilterIndex_file.initialdirectory

c++gdal如何在大图像中截取小图像并获取其图像信息_深度学习应用“Zero Shot”超分辨率重构图像..._weixin_39792472的博客-程序员宅基地

超分辨率(SR)是一种提高图像分辨率的技术。这些方法是从低分辨率(LR)图像中获得高分辨率(HR)输出。执行单图像超分辨率(SISR)的目的是在增加图像尺寸的同时使其质量下降的最小。应用范围很广,如医学成像,压缩,农业分析,自动驾驶到卫星图像、侦察等等。超分辨率领域正在经历一段复兴时期。卷积神经网络和生成性对抗网络等深度学习模型的最新进展引发了各种新方法,并为基于特征工程的经典方法无法解决的问题带..._zssr

挂靠华为数通售前L3证书-程序员宅基地

目前手上有一张数通L3证书可以挂靠,有需要联系微信:ting-zizi12

推荐文章

热门文章

相关标签