关键词搜索

源码搜索 ×
×

vb.net 教程 4-9 二进制文件读写 2

发布2021-09-07浏览502次

详情内容

继续上一节讲解二进制文件的读写。

本节以实例的方式讲解二进制文件的读取。

请不要忘了加上 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

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载