Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# hex to ascii

Tags:

I'm trying to convert a String of hex to ASCII, using this:

public void ConvertHex(String hexString)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < hexString.Length; i += 2)
    {
        String hs = hexString.Substring(i, i + 2);
        System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
    }
    String ascii = sb.ToString();
    MessageBox.Show(ascii);
}

but I get an out or bounds exception, I'm sure its a glaring error but other code I have tried does not work either. What am I doing wrong?

like image 890
Pete Avatar asked Apr 10 '11 16:04

Pete


3 Answers

This code will convert the hex string into ASCII, you can copy paste this into a class and use it without instancing

public static string ConvertHex(String hexString) {     try     {         string ascii = string.Empty;          for (int i = 0; i < hexString.Length; i += 2)         {             String hs = string.Empty;              hs   = hexString.Substring(i,2);             uint decval =   System.Convert.ToUInt32(hs, 16);             char character = System.Convert.ToChar(decval);             ascii += character;          }          return ascii;     }     catch (Exception ex) { Console.WriteLine(ex.Message); }      return string.Empty; } 

Notes

2 = the no. of hexString chars used to represent an ASCII character.

System.Convert.ToUInt32(hs, 16) = "convert the base 16 hex substrings to an unsigned 32 bit int"

like image 95
ArnaldoRivera Avatar answered Sep 18 '22 16:09

ArnaldoRivera


There are four three problems here:

  1. Since you're incrementing i by 2 on each iteration, you need to terminate at hexString.Length - 1. This doesn't actually matter; incrementing by two after the final iteration will bring the counter above the checked length regardless.
  2. You're taking the wrong number of characters from hexString.
  3. hs is never used.
  4. You're not appending anything to sb.

Try this:

for (int i = 0; i < hexString.Length; i += 2) {     string hs = hexString.Substring(i, 2);     sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16))); } 

Note that there's no need to qualify the types with their namespace, System (assuming you've referenced it at the top of the file with a using statement).

like image 39
Will Vousden Avatar answered Sep 19 '22 16:09

Will Vousden


String hs = hexString.Substring(i, i + 2);
System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();

Do you notice you're never using hs ??

And that you're converting the first 2 chars over and over?

like image 23
Henk Holterman Avatar answered Sep 18 '22 16:09

Henk Holterman