Работа с нулевым символом в VB.NET - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь открыть двоичный файл в VB.NET (Visual Studio 2010), который выглядит следующим образом:

enter image description here Файл открывается нормально с помощью этого метода:

Dim OpenFile1 As New OpenFileDialog
If (OpenFile1.ShowDialog = System.Windows.Forms.DialogResult.OK And (OpenFile1.FileName.Length > 0)) Then
      'do something
End If

Однако, если "сделать что-то":

Dim readText As String = File.ReadAllText(OpenFile1.FileName)
MsgBox(readText)

Преобразуется только первый байт, так как второй равен 00 (ноль) и усекает остальную часть файла,отмечая конец строки, и он отображает только первый байт F0 (≡ в ASCII).

Но если я это сделаю:

'convert file to hex string
Dim bytes As Byte() = IO.File.ReadAllBytes(OpenFile1.FileName)
Dim hex As String() = Array.ConvertAll(bytes, Function(b) 
b.ToString("X2"))
Dim newfile As String
newfile = (String.Join("", hex))
RichTextBox1.Text = newfile

Теперь строка должным образом преобразуется в шестнадцатеричные значения,Пока все хорошо.

enter image description here

Однако, когда я пытаюсь преобразовать строку обратно в ASCII, используя этот метод:

 'convert hex string to text and put it into the richtextbox
 Dim asciistring As String = ""
 For x As Integer = 0 To (newfile.Length - 1) Step 2
      Dim k As String = newfile.Substring(x, 2)
      asciistring &= System.Convert.ToChar(System.Convert.ToUInt32(k, 
 16)).ToString()
 Next
 RichTextBox1.Text = asciistring

Опять же, конвертируется только первый байт.Остальное усекается, как только он находит 00 (ноль).Есть ли способ обойти эту ситуацию?

1 Ответ

0 голосов
/ 17 апреля 2019

Этот код еще не проверен, но вы можете попробовать попробовать этот метод:

Public Shared Function ConvertHex(ByVal hexString As String) As String
Try
    Dim ascii As String = String.Empty

    For i As Integer = 0 To hexString.Length - 1 Step 2
        Dim hs As String = String.Empty
        hs = hexString.Substring(i, 2)
        Dim decval As UInteger = System.Convert.ToUInt32(hs, 16)
        Dim character As Char = System.Convert.ToChar(decval)
        ascii += character
    Next

    Return ascii
Catch ex As Exception
    Console.WriteLine(ex.Message)
End Try

Return String.Empty
End Function

При вызове функции просто передайте строку hex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...