VB.Netで、BinaryReaderでファイルを開きます。
ファイルでいくつかの16進値を見つける必要があり、それらが見つかった場合は、最初のバイトのオフセットアドレスが返されます。
可能です?どうすればこれを達成できますか?ありがとうございました
編集:
私の現在のコード:
Private Function findOffset()
Using reader As New BinaryReader(File.Open(filename, FileMode.Open))
' Loop through length of file.
Dim pos As Integer = 0 ' <== THIS IS THE OFFSET
Dim length As Integer = reader.BaseStream.Length
Do While pos < length
' Read the integer.
Dim value As Byte = reader.ReadByte()
If value = CByte(&H41) Then
Return pos
Exit Do
End If
' Add length of integer in bytes to position.
pos += 1
Loop
End Using
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MsgBox(Hex(findOffset()).ToString.PadLeft(6, "0"c))
End Sub
私がやろうとしていることは:
たとえば、ファイルを開くと、そのファイルを16進エディターで開くと、いくつかの16進値があることがわかります41,42,43,44
。その値を見つけて、それらが見つかったオフセットアドレスを返す必要があります。
私の現在のコードでは動作しますが、1バイトしか見つけることができず、1つ以上を見つける必要があります。1kb以上のデータを見つける必要がありますか?
いくつかのbinファイルの空き領域を見つけるためにこれを作成しています。たとえば、10バイトの空き容量が必要です。これはFF,FF,FF,FF,FF,FF,FF,FF,FF,FF
16進エディタ内にあり、それを見つけて最初の空のバイトのオフセットアドレスを返す必要があります。
編集2
ここにコードの最初の行があります。
Private Function findOffset(query as Byte())
Using reader As New BinaryReader(File.Open(filename, FileMode.Open))
Dim startOffset = 80
Dim length As Integer = reader.BaseStream.Length - startOffset
reader.BaseStream.Position = startOffset
If query.Length <= length Then
...
しかし、機能しません..空き領域は10進数のオフセットから始まることがわかります00000047
私はここで何か間違ったことをしました、私はあなたが何を意味するのかよく理解していませんでした
「長さ」変数「長さ=長さ-startOffset」を変更します