Convert string to hex-string in C#
252,878
Solution 1
First you'll need to get it into a byte[]
, so do this:
byte[] ba = Encoding.Default.GetBytes("sample");
and then you can get the string:
var hexString = BitConverter.ToString(ba);
now, that's going to return a string with dashes (-
) in it so you can then simply use this:
hexString = hexString.Replace("-", "");
to get rid of those if you want.
NOTE: you could use a different Encoding
if you needed to.
Solution 2
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"
}
}
Solution 3
In .NET 5.0 and later you can use the Convert.ToHexString()
method.
using System;
using System.Text;
string value = "Hello world";
byte[] bytes = Encoding.UTF8.GetBytes(value);
string hexString = Convert.ToHexString(bytes);
Console.WriteLine($"String value: \"{value}\"");
Console.WriteLine($" Hex value: \"{hexString}\"");
Running the above example code, you would get the following output:
String value: "Hello world"
Hex value: "48656C6C6F20776F726C64"
Solution 4
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))));
Solution 5
According to this snippet here, this approach should be good for long strings:
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"
Another approach in one line
string input = "Hello world";
string result = String.Concat(input.Select(x => ((int)x).ToString("x")));
Related videos on Youtube
Author by
Dariush Jafari
Full Web, PHP, Java(Desktop,Web and Enterprise) GIS (Worldwind,GeoTools,GeoServer,...)
Updated on July 05, 2022Comments
-
Dariush Jafari almost 2 years
I have a string like "sample". I want to get a string of it in hex format; like this:
"796173767265"
Please give the C# syntax.
-
jpaugh almost 11 yearsWhich hex format are you talking about? ASCII? (The example you give is not ASCII for "sample"; is that a reference address?) Little endian, or big? What size?
-
Iarek almost 3 yearsstackoverflow.com/a/65508621/532647 the not-most-upvoted answer has a built-in .NET 5 helper, linking from here for more visibility
-
-
svick almost 11 yearsYou could simplify that to
((int)c).ToString("X")
. -
svick almost 11 yearsActually, I realized this would be wrong for any characters ≤ 0x0F, because of the missing zero padding. To fix that, use
ToString("X2")
. -
Piotr Kula over 9 yearsThe first one worked for me on
dot42
it takes about 10 seconds to process 4096bytes but I needed it for debugging and it worked as opposed to the BitConverter that just hangs. +1 -
pylover about 9 yearsIts better to use two
Extension Method
s for that -
jacktric over 7 yearsUsing the Default Encoding could fail in any case? Running on different versions of Windows for example?
-
Mike Perrenoud over 7 years@jacktric if you know the encoding you should always use the specific encoding. However, I've been using the
Default
encoding for more than a decade and haven't had issues in production across geographic locations or versions of Windows. -
Momoro about 3 yearsGreat answer, I didn't know .NET had finally included a built-in way to convert strings to hex! (Not just Base64!) Thanks!
-
CCG over 2 yearsWhat if you want it to go the other way around? So from a variable which is a string in hex to a string with only alphanumerals?
-
robnick almost 2 yearsThis answer doesn't appear to have anything to do with the question?