Converting from hex to string
Clash 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
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.
Why not just remove the dashes?
– 1800 INFORMATION
Apr 7 '09 at 9:49