vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings   |   VB-Versionen: VB2005, VB200823.09.08
Hex-Dump

Diese Funktion wandelt einen String in einen formatierten HexDump-String um.

Autor:   Helmut SuhrenBewertung:     [ Jetzt bewerten ]Views:  12.732 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Die Function HexDump wandelt einen (Datei-)String in einen formatierten HexDump-String um. Dieser kann z.B. in einer Textbox angezeigt werden.
Die Nutzung der StringBuilder-Klasse macht einen erheblichen Geschwindigkeitsvorteil gegenüber Verkettungsvorgängen mithilfe des &-Operators deutlich.

Module modHexDump
  ''' <summary>
  ''' Die Funktion HexDump wandelt einen Srting in einen HexDump String um.
  ''' </summary>
  ''' <param name="strInput">Eingangs String</param>
  ''' <param name="strLength">Länge des Eingangs String (-1: kompletten String)</param>
  ''' <returns>Ausgangs String</returns>
  ''' <remarks></remarks>
  Friend Function HexDump(ByRef strInput As String, _
    Optional ByVal strLength As Integer = -1) As String
 
    Dim Character As String
    Dim AsciiValue As Integer
    Dim i As Integer
    Dim tmp As Integer
    Const Columns As Integer = 16
 
    Dim sbTemp As New System.Text.StringBuilder
    Dim sbOutput As New System.Text.StringBuilder
 
    If strLength = -1 Then strLength = strInput.Length
 
    For i = 1 To strLength
 
      ' nächsten Character bestimmen
      Character = strInput.Substring(i - 1, 1)
 
      ' Ascii Wert des Characters bestimmen
      AsciiValue = Asc(Character)
 
      If i Mod Columns = 1 Then
        ' zu Beginn der Ausgabe-Zeile den Pointer darstellen ...
        sbOutput.Append(FormatHex((i - 1).ToString("X"), 8) & "   ")
      End If
 
      ' ... dann den hex-Werte anhängen ...
      sbOutput.Append(FormatHex(AsciiValue.ToString("X"), 2))
      sbOutput.Append(IIf(i Mod Columns = 8, " - ", " "))
 
      ' darstellbare Zeichen als Character darstellen, andere als "."
      sbTemp.Append(IIf(AsciiValue >= 32, Character, "."))
 
      If i Mod Columns = 0 Then
        ' ... und am Ende der Zeile die Character anhängen
        sbOutput.Append("   " & sbTemp.ToString & vbCrLf)
        sbTemp.Remove(0, sbTemp.Length)
      End If
 
    Next
 
    If sbTemp.ToString <> "" Then
      ' Letzte (unvollständige) Ausgabe-Zeile darstellen
      tmp = Columns - strLength Mod Columns
      sbOutput.Append(StrDup(3 * tmp, " "))
      If tmp > 8 Then sbOutput.Append("  ")
      sbOutput.Append("   " & sbTemp.ToString & vbCrLf)
    End If
 
    Return sbOutput.ToString
 
  End Function
 
  ''' <summary>
  ''' Die Funktion FormatHex formatiert den Hex-String auf die vorgegebene Anzahl von Zeichen.
  ''' </summary>
  ''' <param name="strIn">Eingangs Hex-String</param>
  ''' <param name="num">Anzahl der Zeichen</param>
  ''' <returns>Ausgangs String</returns>
  ''' <remarks></remarks>
  Private Function FormatHex(ByVal strIn As String, ByVal num As Integer) As String
    If Len(strIn) = num Then
      Return strIn
    Else
      Return StrDup(num - Len(strIn), "0") & strIn
    End If
  End Function
End Module