我目前的代码=
Private Function findOffset()
Using reader As New BinaryReader(File.Open("FilePath", FileMode.Open, FileAccess.Read))
Dim pos As Integer = 0
Dim length As Integer = reader.BaseStream.Length
Do While pos < length
Dim value As Byte = reader.ReadByte()
If value = CByte(&H13) Then
Return pos
Exit Do
End If
pos += 1
Loop
End Using
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = (Hex(findOffset()).ToString.PadLeft(6, "0"c))
End Sub做好今晚的准备,但早上第一件事就回来。
发布于 2014-10-23 08:06:36
你的第一个问题在于:
If value = CByte(&H13) Then
Return pos
Exit Do
End If如果找到第一个实例,则退出函数并丢弃BinaryReader。如果再次调用函数,则在0位置创建一个新读取器。
尝试将代码更改为:
Dim positions As New List(Of Integer)()
[...]
If value = CByte(&H13) Then
positions.Add(pos)
End If这样你就能得到所有发生的事情。
要显示您发现的所有值,您必须将它们连接到一个String中。
TextBox1.Text = String.Join("|", findOffset())如果要以某种方式转换整数值,可以在findOffset()上循环或使用LINQ的Select方法:
findOffset().Select(Function(i) Hex(i).ToString.PadLeft(6, "0"c))对于第二个问题:只需将TextBox的转换文本属性作为函数参数传递给findOffSet方法即可。
Private Function findOffset(ByVal search as Byte)
[...]
If value = search Then
[...]
End Function就这样叫它:
findOffset(Convert.ToByte(Convert.ToInt16(mySearchTextBox.Text)))您必须事先检查有效的文本输入,否则将在这一行得到异常。
为了回答您的第三个问题:我认为对于少量的结果来说,TextBox是可以的,但是如果您的搜索结果有点复杂,您应该考虑使用ListBox,如果您的搜索结果有点复杂的话,您应该考虑使用DataGridView (据我所知,在这种特殊情况下)。
https://stackoverflow.com/questions/26522512
复制相似问题