2017-03-29 68 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