Frage

Ich brauche für eine string in einem Paket befindet sich zu überprüfen, die ich als byte Array erhalten. Wenn ich BitConverter.ToString() verwenden, erhalte ich das Bytes als string mit Bindestrichen (f.e .: 00-50-25-40-A5-FF).
Ich die meisten Funktionen habe ich versucht, nach einem schnellen googeln gefunden, aber die meisten von ihnen haben Eingabeparameter Typ string und wenn ich sie mit dem string mit Bindestrichen nennen, es gibt eine Ausnahme aus.

Ich brauche eine Funktion, die hex dreht (wie string oder als byte) in die string, die den hexadezimalen Wert repräsentiert (f.e .: 0x31 = 1). Wenn der Eingangsparameter string ist, sollte die Funktion Striche erkennen (zB „47-61-74-65-77-61-79-53-65-72-76-65-72“), weil BitConverter nicht richtig konvertieren .

War es hilfreich?

Lösung

Wie so?

static void Main()
{
    byte[] data = FromHex("47-61-74-65-77-61-79-53-65-72-76-65-72");
    string s = Encoding.ASCII.GetString(data); // GatewayServer
}
public static byte[] FromHex(string hex)
{
    hex = hex.Replace("-", "");
    byte[] raw = new byte[hex.Length / 2];
    for (int i = 0; i < raw.Length; i++)
    {
        raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
    }
    return raw;
}

Andere Tipps

string str = "47-61-74-65-77-61-79-53-65-72-76-65-72";
string[] parts = str.Split('-');

foreach (string val in parts)
{ 
    int x;
    if (int.TryParse(val, out x))
    {
         Console.Write(string.Format("{0:x2} ", x);
    }
}
Console.WriteLine();

können Sie teilen die Zeichenfolge am -
Konvertieren Sie den Text zu Ints (int.TryParse)
Ausgabe der int als Hex-String {0: x2}

Für die Unicode-Unterstützung:

public class HexadecimalEncoding
{
    public static string ToHexString(string str)
    {
        var sb = new StringBuilder();

        var bytes = Encoding.Unicode.GetBytes(str);
        foreach (var t in bytes)
        {
            sb.Append(t.ToString("X2"));
        }

        return sb.ToString(); // returns: "48656C6C6F20776F726C64" for "Hello world"
    }

    public static string FromHexString(string hexString)
    {
        var bytes = new byte[hexString.Length / 2];
        for (var i = 0; i < bytes.Length; i++)
        {
            bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
        }

        return Encoding.Unicode.GetString(bytes); // returns: "Hello world" for "48656C6C6F20776F726C64"
    }
}

Ihr Verweis auf „0x31 = 1“ macht ich denke, dass Sie tatsächlich ASCII-Werte in Strings zu konvertieren versuchen - in dem Fall, dass Sie so etwas wie Encoding.ASCII.GetString (Byte []) verwendet werden sollten

 string hexString = "8E2";
 int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
 Console.WriteLine(num);
 //Output: 2274

https://msdn.microsoft.com/en-us/ Bibliothek / bb311038.aspx

Wenn Sie das Ergebnis als Byte-Array benötigen, sollten Sie es direkt übergeben, ohne es in einen String zu ändern, ist es dann zurück in Bytes ändern. In Ihrem Beispiel der (f.e .: 0x31 = 1) ist der ASCII-Codes. In diesem Fall eine Zeichenfolge (von Hex-Werten) in ASCII-Wert zu konvertieren verwenden: Encoding.ASCII.GetString(byte[])

        byte[] data = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30 };
        string ascii=Encoding.ASCII.GetString(data);
        Console.WriteLine(ascii);

Die Konsole wird angezeigt: 1234567890

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top