从vbscript中的文件获取固定位置的十六进制
所以我有多个文件,在十六进制编辑器中如下所示:从vbscript中的文件获取固定位置的十六进制,vbscript,hex,Vbscript,Hex,所以我有多个文件,在十六进制编辑器中如下所示: 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是一个固定的位置,如何获取0A值并将其存储到变
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是一个固定的位置,如何获取0A值并将其存储到变量中?(始终为第5字节)
我需要得到0A值,以便与其他值进行比较并做出决定
我需要在VBscript中执行此操作
提前感谢并感谢您的帮助在VBSCript中还有其他与此相关的问题/答案,也许它们会对您有所帮助 重要的是要记住,二进制文件(就像任何文件一样)是一个连续的字节流。因此,与其考虑每行的“第5字节”,还不如记住你感兴趣的是第5、10、15等字节
这就是为什么十六进制查看器有一个“偏移量”列来显示字节流的长度。在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
我发现如何使用
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
这不是最好的链接示例,他们应该使用
ADODB.Stream
,但事实并非如此。@Lankymart-如果您知道更好的示例,请添加其他链接。我必须承认我的VBScript相当生疏:)有趣的是,它没有使用ADODB。你提到的例子是在VB.Net中,而不是VBScript。在编码时你必须小心,这就是为什么ADODB.Stream
是一个更好的选择。它起作用了!非常感谢你。但我很好奇ADODB会是什么样子。Stream。。。我尝试了很多,但是失败了。最后我发现了如何使用ADODB.Stream
。做同样的事。另外,我需要在两个字符中输出十六进制值