如何使用VBScript从二进制文件读取

如何使用VBScript从二进制文件读取

本文介绍了如何使用VBScript从二进制文件读取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是VBScript的新手,如果我错了,可以随时纠正我.

I'm very new to VBScript, correct me at any point, if I'm wrong.

从二进制文件读取数据时遇到问题.

I'm facing issue while reading from a binary file.

我需要从二进制文件中读取最后四个字节,并将其与本地变量进行比较.

My need is to read the last four bytes from a binary file and compare the same with a local variable.

但是问题是在将ASCII字符(最后4个字节)转换为等效的十六进制时,我得到了0x3F的值.但是我可以通过打开打开该脚本创建的文件,在其中使用相同的二进制流写入文件中看到有效的数据.

But the issue is I'm getting value of 0x3F while converting the ASCII characters (of last 4 bytes) to Hex equivalent. But I'm able to see valid data in the files created by this script by opening, where the same binary stream is used to write to file.

我不确定是否丢失了一些东西

I'm not sure if I'm missing something

下面是参考代码

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const CRC = 4
Dim BinaryStream, OutStream, StartPos, Bytes
'debug
Dim fso, MyFile
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
'debug
Dim bootstrapIOPCRC, bootIOPCRC, appIOPCRC, bootDSPCRC, codeDSPCRC, dataDSPCRC
Dim a(1)
bootstrapIOP = "C:\Bins\1.bin"
bootIOP = "C:\Bins\2.bin"
appIOP = "C:\Bins\3.bin"
bootDSP = "C:\Bins\4.bin"
codeDSP = "C:\Bins\5.bin"
dataDSP = "C:\Bins\6.bin"
'Create the BinaryStream object
Set BinaryStream = CreateObject("ADODB.Stream")
'Set it up and load in the source file
BinaryStream.Type = adTypeBinary
BinaryStream.Open
' *** For bootstrapIOP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile bootstrapIOP
'Create OutStream
Set OutStream = CreateObject("ADODB.Stream")
OutStream.Type = adTypeBinary
OutStream.Open
SET objFSO = CREATEOBJECT("Scripting.FileSystemObject")
SET objFile = objFSO.GetFile(bootstrapIOP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\bootstrapIOP.txt", adSaveCreateOverWrite
bootstrapIOPCRC = 0
bootstrapIOPCRC = OutStream.Read ( CRC)
strHex =""
MsgBox((Asc(Mid(bootstrapIOPCRC,1,1))))
MsgBox(Mid(bootstrapIOPCRC,2,1))
MsgBox(bootstrapIOPCRC)
For i=1 To Len(bootstrapIOPCRC)
    strHex = strHex + Hex(Asc(Mid(bootstrapIOPCRC,i,1)))
Next
If (strHex = "") Then
    MsgBox "Yippy"
Else
    MsgBox(strHex)
End If
MsgBox(Len(bootstrapIOPCRC))
Set objFSO1=CreateObject("Scripting.FileSystemObject")
' How to write file
outFile="c:\test.txt"
Set objFile = objFSO1.CreateTextFile(outFile,True)
objFile.Write a(0)
objFile.Write a(1)
objFile.Close
' *** For bootIOP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile bootIOP
SET objFile = objFSO.GetFile(bootIOP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\bootIOP.txt", adSaveCreateOverWrite
bootIOPCRC = 0
bootIOPCRC = OutStream.Read ( CRC)
' *** For appIOP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile appIOP
SET objFile = objFSO.GetFile(appIOP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\appIOP.txt", adSaveCreateOverWrite
appIOPCRC = 0
appIOPCRC = OutStream.Read ( CRC)
' *** For bootDSP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile bootDSP
SET objFile = objFSO.GetFile(bootDSP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\bootDSP.txt", adSaveCreateOverWrite
bootDSPCRC = 0
bootDSPCRC = OutStream.Read ( CRC)
' *** For codeDSP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile codeDSP
SET objFile = objFSO.GetFile(codeDSP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\codeDSP.txt", adSaveCreateOverWrite
codeDSPCRC = 0
codeDSPCRC = OutStream.Read ( CRC)
' *** For dataDSP
Bytes = 0
StartPos = 0
BinaryStream.LoadFromFile dataDSP
SET objFile = objFSO.GetFile(dataDSP)
Bytes = CLng(objFile.Size)
StartPos = Bytes-CRC
'selecting the required data
BinaryStream.Position = StartPos
BinaryStream.CopyTo OutStream, CRC
OutStream.SaveToFile "C:\dataDSP.txt", adSaveCreateOverWrite
dataDSPCRC = 0
dataDSPCRC = OutStream.Read ( CRC)

推荐答案

在使用二进制数据而不是字符串数据时,您需要使用正确的Function变体.

When working with binary data instead of string data you need to use the correct Function variations.

  • LenB()-返回二进制数据的长度(以字节为单位).
  • MidB()-从二进制数据中返回指定数量的字节.
  • AscB()-返回字节的字符代码.
  • LenB() - Returns the length of binary data in bytes.
  • MidB() - Returns a specified number of bytes from binary data.
  • AscB() - Returns a character code for a byte.
'Using the following pseudo code should help
hexstring = Hex(AscB(MidB(binarydata, start, numofbytes)))


有用的链接

  • 信息:Asc/AscB/AscW和Chr/ChrB/ChrW之间的功能差异

  • Useful Links

    • INFO: Function Differences Between Asc/AscB/AscW and Chr/ChrB/ChrW
    • 这篇关于如何使用VBScript从二进制文件读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 09:29