383 Stimmen

byte[] in Hex-String

Wie konvertiere ich eine byte[] zu einer string ? Jedes Mal, wenn ich es versuche, bekomme ich

System.Byte[]

anstelle des Wertes.

Und wie erhalte ich den Wert in Hexadezimal- statt in Dezimalwerten?

1voto

Ash Punkte 58914

Wie andere bereits gesagt haben, hängt es von der Kodierung der Werte im Byte-Array ab. Trotzdem müssen Sie sehr vorsichtig mit dieser Art von Dingen sein, oder Sie können versuchen, Bytes zu konvertieren, die von der gewählten Kodierung nicht behandelt werden.

Jon Skeet hat ein guter Artikel über Kodierung und Unicode in .NET. Empfohlene Lektüre.

1voto

Toan Punkte 156

Ich bin mir nicht sicher, ob Sie Leistung benötigen, um dies zu tun, aber hier ist die schnellste Methode zur Konvertierung von Byte[] in Hex-String, die ich mir vorstellen kann:

static readonly char[] hexchar = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static string HexStr(byte[] data, int offset, int len, bool space = false)
{
    int i = 0, k = 2;
    if (space) k++;
    var c = new char[len * k];
    while (i < len)
    {
        byte d = data[offset + i];
        c[i * k] = hexchar[d / 0x10];
        c[i * k + 1] = hexchar[d % 0x10];
        if (space && i < len - 1) c[i * k + 2] = ' ';
        i++;
    }
    return new string(c, 0, c.Length);
}

0voto

Matthew Whited Punkte 21770

Eine gute Möglichkeit, dies mit LINQ zu tun...

var data = new byte[] { 1, 2, 4, 8, 16, 32 }; 
var hexString = data.Aggregate(new StringBuilder(), 
                               (sb,v)=>sb.Append(v.ToString("X2"))
                              ).ToString();

0voto

alex1kirch Punkte 45
private static string GuidToRaw(Guid guid)
{
    byte[] bytes = guid.ToByteArray();

    int harCount = bytes.Length * 2;
    char[] chars = new char[harCount];

    int index = 0;
    for (int i = 0; i < harCount; i += 2)
    {
        byte b = bytes[index++];
        chars[i] = GetHexValue((int)(b / 16));
        chars[i + 1] = GetHexValue((int)(b % 16));
    }
    return new string(chars, 0, chars.Length);
}

private static char GetHexValue(int i)
{
    return (char)(i < 10 ? i + 48 : i + 55);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X