-
vb.net 教程 4-9 二进制文件读写 2
继续上一节讲解二进制文件的读写。
本节以实例的方式讲解二进制文件的读取。
请不要忘了加上 Imports System.IO
窗体设计如下:
按下“判断是否可执行文件”按钮时:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim filename As String
If OpenFileDialog1.ShowDialog <> DialogResult.OK Then
Exit Sub
End If
filename = OpenFileDialog1.FileName
MessageBox.Show("这" & IIf(checkMZ(filename), "是", "不是") & "可执行文件")
End Sub
具体判断是否是可执行文件的代码:
Private Function checkMZ(ByVal filename As String) As Boolean
Try
Dim fs As FileStream = New FileStream(filename, FileMode.Open)
Dim br As BinaryReader = New BinaryReader(fs)
Dim intMZSign As Int16 = br.ReadInt16 '检查可执行文件标志
br.Close()
fs.Close()
'检查是否是可执行文件标志
If Convert.ToString(intMZSign, 16).ToUpper = "5A4D" Then
Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
说明
1、通常,可执行文件的标记第一个字节是:4D,对应ASCII表中的M,第二个字节是:5A,对应ASCII表中的Z。
MZ亦即可执行文件的Dos文件头,这是Windows下面的可执行文件为了兼容MS-Dos系统做的保留。
补充说明一下:如果是PE文件还需要判断PE头。请自行在网上搜索PE文件结构。
2、按照上面的说明,应该判断是否是 "4D5A“,但是实际代码中判断的是 ”5A4D“,这是因为存储的时高位在后的原因。
ReadInt16时,读取2个字节,读出来的数据为:23117,转换成16进制数就是 5A4D。
再例如:
按照一个字节一个字节的读取,读取了4个字节,按顺序依次是: 0A 0B 0C 00,那么对应的Int32值应该是:C0B0A(十六进制)、789258(十进制)。
相关知识请自行网上搜索相关知识。
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看 vb.net 教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/uruseibest/article/details/75210086
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比