Поиск значения HEX по определенному смещению в VB.net

Я пытаюсь понять, как читать раздел байтов (скажем, 16), начиная с определенного адреса, скажем, 0x2050. Я хотел бы получить 16-битный вывод в шестнадцатеричных значениях в метку.

Я пытался понять BinaryReader и FileStreams, но я не совсем уверен, в чем разница или какой из них я должен использовать.

* Я видел много тем, в которых упоминается, что размер файла может быть проблемой, и я хотел бы отметить, что некоторые файлы, которые я буду проверять, могут иметь размер до 4 ГБ.


Я пробовал следующее:

Dim bytes() As Byte = New Byte(OpenedFile.Length) {}
ListBox1.Items.Add(Conversion.Hex(OpenedFile.Read(bytes, &H2050, 6)))

Но это просто записывает 6 байт в файл, и я не уверен, почему. В списке нет вывода.


person level42    schedule 05.08.2015    source источник


Ответы (1)


Как насчет следующего?:

Sub Main()
    Dim pos As Long = 8272
    Dim requiredBytes As Integer = 2
    Dim value(0 To requiredBytes - 1) As Byte
    Using reader As New BinaryReader(File.Open("File.bin", FileMode.Open))
        ' Loop through length of file.
        Dim fileLength As Long = reader.BaseStream.Length
        Dim byteCount As Integer = 0
        reader.BaseStream.Seek(pos, SeekOrigin.Begin)
        While pos < fileLength And byteCount < requiredBytes
            value(byteCount) = reader.ReadByte()
            pos += 1
            byteCount += 1
        End While
    End Using

    Dim displayValue As String
    displayValue = BitConverter.ToString(value)
End Sub
person Toadlips    schedule 05.08.2015
comment
Это приводит к тому, что выбрасывается флаг «Файл используется», и он записывает 6 байтов в файл (удаляя все содержимое). - person level42; 05.08.2015
comment
Кажется, работает, как только я очистил код, позвольте мне еще немного протестировать. - person level42; 05.08.2015
comment
В приведенном выше коде нет инструкций, которые могли бы выполнять запись в файл... и если появился флаг «Файл используется», это означает, что ему не удалось получить доступ к файлу для операций чтения или записи. Вы используете это для файла, который уже открыт в другом приложении? - person Toadlips; 05.08.2015
comment
Привет, у меня все отлично работает, еще раз спасибо. Но мне было интересно, как я могу удалить дефисы из вывода? Я не могу найти, где это устанавливается. Это создает проблему, когда я пытаюсь преобразовать HEX в ASCII. - person level42; 07.08.2015
comment
Рад, что это работает! Если дефисы вызывают затруднения, вы можете заменить дефис чем-то другим, например: displayValue = BitConverter.ToString(value).Replace("-", " "). Кроме того, если вы хотите получить строку ASCII непосредственно из массива байтов, вы можете сделать это: displayValue = System.Text.Encoding.ASCII.GetString(value). - person Toadlips; 08.08.2015