web-dev-qa-db-fra.com

Convertir une chaîne en chaîne hexagonale en C #

J'ai une chaîne comme "échantillon". Je veux obtenir une chaîne de celui-ci dans format hexadécimal; comme ça:

  "796173767265"

S'il vous plaît donner la syntaxe C #.

46
Dariush Jafari

D'abord, vous aurez besoin de le mettre dans un byte[], alors faites ceci:

byte[] ba = Encoding.Default.GetBytes("sample");

et alors vous pouvez obtenir la chaîne:

var hexString = BitConverter.ToString(ba);

maintenant, cela va retourner une chaîne avec des tirets (-) afin que vous puissiez ensuite simplement utiliser ceci:

hexString = hexString.Replace("-", "");

se débarrasser de ceux-là si vous voulez.

REMARQUE: vous pouvez utiliser un autre Encoding si vous en aviez besoin.

113
Mike Perrenoud
var result = string.Join("", input.Select(c => ((int)c).ToString("X2")));

OR

var result  =string.Join("", 
                input.Select(c=> String.Format("{0:X2}", Convert.ToInt32(c))));
20
Damith

Pour le support Unicode:

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"
    }
}
19
franckspike

Selon cet extrait ici , cette approche devrait être bonne pour les longues chaînes:

private string StringToHex(string hexstring)
{
    StringBuilder sb = new StringBuilder();
    foreach (char t in hexstring)
    { 
        //Note: X for upper, x for lower case letters
        sb.Append(Convert.ToInt32(t).ToString("x")); 
    }
    return sb.ToString();
}

usage:

string result = StringToHex("Hello world"); //returns "48656c6c6f20776f726c64"

Une autre approche en une ligne

string input = "Hello world";
string result = String.Concat(input.Select(x => ((int)x).ToString("x")));
10
fubo

quelques alternatives Unicode

var s = "0????????????????????";

var s1 = s.Aggregate("", (h, c) => h + ((int)c).ToString("x4"));          // left padded with 0       "0030d835dfcfd835dfdad835dfe5d835dff0d835dffb"
var s2 = s.Aggregate("", (h, c) => h + string.Format("{0,4:x}", (int)c)); // left padded with space   "  30d835dfcfd835dfdad835dfe5d835dff0d835dffb"

var sL = BitConverter.ToString(Encoding.Unicode.GetBytes(s)).Replace("-", "");       // Little Endian "300035D8CFDF35D8DADF35D8E5DF35D8F0DF35D8FBDF"
var sB = BitConverter.ToString(Encoding.BigEndianUnicode.GetBytes(s)).Replace("-", ""); // Big Endian "0030D835DFCFD835DFDAD835DFE5D835DFF0D835DFFB"

// no encodding "300035D8CFDF35D8DADF35D8E5DF35D8F0DF35D8FBDF"
byte[] b = new byte[s.Length * sizeof(char)];
Buffer.BlockCopy(s.ToCharArray(), 0, b, 0, b.Length);
var sb = BitConverter.ToString(b).Replace("-", "");
2
Slai