Rubrik: Variablen/Strings | VB-Versionen: VB2005, VB2008 | 23.09.08 |
Hex-Dump Diese Funktion wandelt einen String in einen formatierten HexDump-String um. | ||
Autor: Helmut Suhren | Bewertung: | Views: 12.742 |
ohne Homepage | System: 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