Rubrik: Variablen/Strings | VB-Versionen: VB2005, VB2008 | 23.09.08 |
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