Converting from hex to string

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



Converting from hex to string



I need to check for a string located inside a packet that I receive as byte array. If I use BitConverter.ToString(), I get the bytes as string with dashes (f.e.: 00-50-25-40-A5-FF).

I tried most functions I found after a quick googling, but most of them have input parameter type string and if I call them with the string with dashes, It throws an exception.


string


byte


BitConverter.ToString()


string


string


string



I need a function that turns hex(as string or as byte) into the string that represents the hexadecimal value(f.e.: 0x31 = 1). If the input parameter is string, the function should recognize dashes(example "47-61-74-65-77-61-79-53-65-72-76-65-72"), because BitConverter doesn't convert correctly.


string


byte


string


string


BitConverter





Why not just remove the dashes?
– 1800 INFORMATION
Apr 7 '09 at 9:49





I found a good method at Code Review: codereview.stackexchange.com/questions/97950/…
– Breeze
Jun 28 '16 at 12:02




6 Answers
6



Like 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;





@Ian - huh? That is the value of "s"...
– Marc Gravell
Apr 7 '09 at 10:08





@Marc,Thanks! @lan,That's the byte array I gave in my question,Marc is more thank helpful for checking it as string. :)
– Ivan Prodanov
Apr 7 '09 at 10:14





@Marc, yeah yeah.. I noticed that.. erm.. (hides under desk)
– Dead account
Apr 7 '09 at 10:14





@Marc,Encoding.ASCII has parameter char.How to convert data into char?
– Ivan Prodanov
Apr 7 '09 at 10:21





@Marc,I did it in one line only. :) name = System.Text.Encoding.ASCII.GetString(data, 8, (int)BitConverter.ToUInt16(data, 6));
– Ivan Prodanov
Apr 7 '09 at 10:24


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();



You can split the string at the -

Convert the text to ints (int.TryParse)

Output the int as a hex string 0:x2



For Unicode support:


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"






This doesn't seem to work. Using Windows 8.1, Visual C# 2010 Express.
– akinuri
Jul 4 '15 at 7:51



Your reference to "0x31 = 1" makes me think you're actually trying to convert ASCII values to strings - in which case you should be using something like Encoding.ASCII.GetString(Byte)



If you need the result as byte array, you should pass it directly without changing it to a string, then change it back to bytes.
In your example the (f.e.: 0x31 = 1) is the ASCII codes. In that case to convert a string (of hex values) to ASCII values use:
Encoding.ASCII.GetString(byte)


0x31 = 1


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);



The console will display: 1234567890


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



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






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard