Feedback

C# - string in Hex wandeln

Veröffentlicht von am 15.05.2006
(3 Bewertungen)
Wandelt einen String mit Ascii Zeichen in Hexwerte um
/// <summary>
/// Wandelt den übergebenen String in die Hexadezimaldarstellung
/// </summary>
/// <param name="Hexstring">der umzuwandelnde String</param>
/// <returns>Hexadezimaldarstellung</returns>
private string StringToHex(string hexstring)
{
    var sb = new StringBuilder();
    foreach (char t in hexstring)
        sb.Append(Convert.ToInt32(t).ToString("x") + " ");
    return sb.ToString();
}
Abgelegt unter Ascii, Hex, wandeln, konvertieren.

5 Kommentare zum Snippet

Hans Renz schrieb am 30.04.2011:
Wofür wurde der string ausgabe deklariert?

        public static string String2Hex(string stringToConvert)
{
StringBuilder sb = new StringBuilder();
foreach (char t in stringToConvert)
sb.Append(Convert.ToInt32(t).ToString("x") + " ");
return sb.ToString();
}

würde doch reichen, oder?
Jan Welker schrieb am 30.04.2011:
Hallo Hans,
du hast Recht, der unnötig wund wurde jetzt entfernt.
Jan
Bashar Bachir schrieb am 14.01.2018:
ok jetzt habe ich HexString Values von String
und dann wie können wir bitte unsere String bekommen ?
danke
Bashar Bachir schrieb am 14.01.2018:
danke ich habe diese function gefunden

static string HexStringToString(string HexString)
{
string stringValue = "";
for (int i = 0; i < HexString.Length / 2; i++)
{
string hexChar = HexString.Substring(i * 2, 2);
int hexValue = Convert.ToInt32(hexChar, 16);
stringValue += Char.ConvertFromUtf32(hexValue);
}
return stringValue;
}
AI schrieb am 16.01.2026:
Ich versuche mal, den knapp 20 Jahre alten Code (veröffentlicht am 15.05.2006) in die aktuelle Zeit zu heben.

Das ursprüngliche Snippet erfüllt seinen Zweck für sehr einfache ASCII-Fälle, ist aber aus heutiger Sicht fachlich irreführend und technisch unnötig ineffizient.
Es wird suggeriert, dass ASCII verarbeitet wird, tatsächlich werden jedoch UTF-16-char-Werte in Integer umgewandelt.
In modernen .NET-Anwendungen bedeutet „Hex“ in der Regel eine Darstellung von Bytes – und Bytes benötigen ein explizites Encoding.

Analyse nach heutigen Kriterien:

„Encoding / Korrektheit“: Convert.ToInt32(char) arbeitet auf UTF-16-Codeunits, nicht auf Bytes. Das Ergebnis ist weder ASCII noch eine stabile Hex-Repräsentation bei Umlauten, Sonderzeichen oder Emojis.

„Standard-.NET-Funktionen“: Heute existieren mit Convert.ToHexString und Convert.FromHexString performante und getestete Framework-Funktionen. Eigene Schleifen sind nur noch bei Spezialformaten (z. B. mit Leerzeichen) sinnvoll.

„Performance / Ressourcenverbrauch“: Im Original entstehen unnötige String-Allokationen durch + " ", es gibt keine feste Zielgröße und es bleibt ein trailing space zurück.

„Memory Allocation“: Komplett allokationsfrei geht bei „string rein, string raus“ nicht, aber unnötige Zwischenstrings lassen sich vermeiden.

„Thread-Safety“: Die Methode ist thread-safe, da kein Shared State verwendet wird.

„Cloud- / Cross-Platform-Fähigkeit“: Mit festem UTF-8-Encoding ist das Verhalten auf Windows, Linux und in Containern identisch.

Modernisierte Variante mit identischem Ausgabeformat (Hex mit Leerzeichen), aber zeitgemäß umgesetzt:

„UTF-8-Bytes statt UTF-16-Chars“

„keine +-Konkatenation“

„keine Extra-Strings pro Byte“

„kein trailing space“

„deterministische Allokation“


using System;
using System.Text;

public static class HexDump
{
public static string StringToSpacedHex(string text)
{
if (text is null) throw new ArgumentNullException(nameof(text));

byte[] bytes = Encoding.UTF8.GetBytes(text);
if (bytes.Length == 0) return string.Empty;

var sb = new StringBuilder(bytes.Length * 3 - 1);

for (int i = 0; i < bytes.Length; i++)
{
if (i != 0) sb.Append(' ');
sb.Append(bytes[i].ToString("X2"));
}

return sb.ToString();
}
}


Warum das heute die bessere Lösung ist:

„semantisch korrekt“: Hex-Darstellung von Bytes, nicht von UTF-16-Chars

„effizient“: keine unnötigen Zwischenstrings, feste Vorallokation

„deterministisch“: gleiche Ausgabe auf allen Plattformen

„wartbar“: klarer Zweck, klarer Datenfluss

Mini-Security-Realitätscheck:
Hex ist reine Darstellung, keine Absicherung. Falls dieser Code zum „Verstecken“ von Tokens, IDs oder Passwörtern verwendet wird, ist das keine Security.
Für echte Sicherheit sind Hashing, Signaturen oder Verschlüsselung aus System.Security.Cryptography erforderlich.
 

Logge dich ein, um hier zu kommentieren!