2017-03-29 123 views
1

所以我有多个文件,在十六进制编辑器看起来象下面这样:获取固定位置的十六进制在VBScript

 Offset(h) 00 01 02 03 04 05 

     1o  10 20 02 00 0A 05 (...) 

     2o  10 20 53 00 0A 03 (...) 

     3o  10 20 22 00 0A 55 (...) 

     4o  10 20 12 00 0A 22 (...) 

如何得到0A值,并存储到一个变量,知道这是一个固定的位置? (总是第5个字节)

我需要得到0A值,所以我比较其他值并做出决定。

我需要在VBscript中做到这一点。

在此先感谢,并感谢所有帮助

回答

1

我发现了如何使用ADODB.Stream来解决这个问题:

Const adTypeBinary = 1 

Dim byteValue 

With CreateObject("ADODB.Stream") 
    .Type = adTypeBinary 
    .Open 
    .LoadFromFile fileName 
    .Position = 4 ' could be any byte position 
    byteValue = Right(00 & Hex(AscB(.Read(1))), 2) ' Returns 0A 
End With 

' Print byteValue 
WSCript.echo "Value = " & byteValue 
0

上有SO就在VBScript reading binary files,也许他们会帮助你的其他问题/解答。

需要记住的重要一点是二进制文件(就像任何文件一样)是连续的字节流。因此,不要考虑每行的“第5个字节”,记住它将是您感兴趣的第5,10,15等字节。

这就是为什么您的十六进制查看器有一个“Offset”列以显示远远超过你的字节流。

+0

不是最好的例子联系起来,他们应该使用'ADODB.Stream'这一点不。 – Lankymart

+0

@Lankymart - 如果你知道更好的例子,请添加其他链接。我必须承认我的VBScript很生锈:)有趣的是[MSDN中的示例](https://msdn.microsoft.com/en-us/library/9tk3bdxw.aspx)不使用ADODB。 – Tony

+1

你引用的例子是在VB.Net中,而不是VBScript。 –

2

只要从头到尾按顺序读取,从二进制文件读取vbscript就很容易。

Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 
Dim BinaryFile : Set BinaryFile = fso.OpenTextFile("content.bin") 
BinaryFile.Skip(4) 
WScript.echo Hex(Asc(BinaryFile.Read(1))) 'Returns "A" 
BinaryFile.Close 
+0

你必须小心编码,这就是为什么'ADODB.Stream'是更好的选择。 – Lankymart

+1

它的工作!非常感谢你。 但我很好奇它将如何与ADODB.Stream ...我试图做,搜寻很多,但我失败了。 – skrenato

+0

终于我找到了如何使用'ADODB.Stream'。要做同样的事情。另外我需要十六进制值以两个字符输出 – skrenato