web-dev-qa-db-fra.com

Convertir de chaîne ascii à chaîne Hex

Supposons que j'ai cette chaîne

string str = "1234"

J'ai besoin d'une fonction qui convertit cette chaîne en cette chaîne: 

"0x31 0x32 0x33 0x34"  

J'ai cherché en ligne et trouvé beaucoup de choses similaires, mais pas une réponse à cette question.

12
cheziHoyzer
string str = "1234";
char[] charValues = str.ToCharArray();
string hexOutput="";
foreach (char _eachChar in charValues )
{
    // Get the integral value of the character.
    int value = Convert.ToInt32(_eachChar);
    // Convert the decimal value to a hexadecimal value in string form.
    hexOutput += String.Format("{0:X}", value);
    // to make output as your eg 
    //  hexOutput +=" "+ String.Format("{0:X}", value);

}

    //here is the HEX hexOutput 
    //use hexOutput 
17
7-isnotbad

Cela semble le travail pour une méthode d'extension

void Main()
{
    string test = "ABCD1234";
    string result = test.ToHex();
}

public static class StringExtensions
{
    public static string ToHex(this string input)
    {
        StringBuilder sb = new StringBuilder();
        foreach(char c in input)
            sb.AppendFormat("0x{0:X2} ", (int)c);
        return sb.ToString().Trim();
    }
}

Quelques astuces.
N'utilisez pas la concaténation de chaînes. Les chaînes sont immuables et chaque fois que vous concaténez une chaîne, une nouvelle chaîne est créée. (Pression sur l'utilisation de la mémoire et la fragmentation) Un StringBuilder est généralement plus efficace dans ce cas. 

Les chaînes sont un tableau de caractères et utiliser un foreach sur une chaîne donne déjà accès au tableau de caractères 

Ces codes communs conviennent parfaitement à une méthode d’extension incluse dans une bibliothèque d’utilitaires toujours disponible pour vos projets (réutilisation de code).

6
Steve
static void Main(string[] args)
{
    string str = "1234";
    char[] array = str.ToCharArray();
    string final = "";
    foreach (var i in array)
    {
        string hex = String.Format("{0:X}", Convert.ToInt32(i));
        final += hex.Insert(0, "0X") + " ";       
    }
    final = final.TrimEnd();
    Console.WriteLine(final);
}

La sortie sera;

0X31 0X32 0X33 0X34

Voici une DEMO .

2
Soner Gönül

Convertir en tableau d'octets puis en hexadécimal

        string data = "1234";

        // Convert to byte array
        byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);

        // Convert to hex and add "0x"
        data =  "0x" + BitConverter.ToString(retval).Replace("-", " 0x");

        System.Diagnostics.Debug.WriteLine(data);
1
JohnnyNoBrakes

C’est celui que j’ai utilisé:

private static string ConvertToHex(byte[] bytes)
        {
            var builder = new StringBuilder();

            var hexCharacters = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

            for (var i = 0; i < bytes.Length; i++)
            {
                int firstValue = (bytes[i] >> 4) & 0x0F;
                int secondValue = bytes[i] & 0x0F;

                char firstCharacter = hexCharacters[firstValue];
                char secondCharacter = hexCharacters[secondValue];

                builder.Append("0x");
                builder.Append(firstCharacter);
                builder.Append(secondCharacter);
                builder.Append(' ');
            }

            return builder.ToString().Trim(' ');
        }

Et puis utilisé comme:

string test = "1234";
ConvertToHex(Encoding.UTF8.GetBytes(test));
0
Davin Tryon
 [TestMethod]
    public void ToHex()
    {
        string str = "1234A";
        var result = str.Select(s =>  string.Format("0x{0:X2}", ((byte)s)));

       foreach (var item in result)
       {
           Debug.WriteLine(item);
       }

    }
0
Davut Gürbüz