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")));
Share:
252,878

Related videos on Youtube

Dariush Jafari
Author by

Dariush Jafari

Full Web, PHP, Java(Desktop,Web and Enterprise) GIS (Worldwind,GeoTools,GeoServer,...)

Updated on July 05, 2022

Comments

  • Dariush Jafari
    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
      jpaugh almost 11 years
      Which 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
      Iarek almost 3 years
      stackoverflow.com/a/65508621/532647 the not-most-upvoted answer has a built-in .NET 5 helper, linking from here for more visibility
  • svick
    svick almost 11 years
    You could simplify that to ((int)c).ToString("X").
  • svick
    svick almost 11 years
    Actually, I realized this would be wrong for any characters ≤ 0x0F, because of the missing zero padding. To fix that, use ToString("X2").
  • Piotr Kula
    Piotr Kula over 9 years
    The 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
    pylover about 9 years
    Its better to use two Extension Methods for that
  • jacktric
    jacktric over 7 years
    Using the Default Encoding could fail in any case? Running on different versions of Windows for example?
  • Mike Perrenoud
    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
    Momoro about 3 years
    Great answer, I didn't know .NET had finally included a built-in way to convert strings to hex! (Not just Base64!) Thanks!
  • CCG
    CCG over 2 years
    What 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
    robnick almost 2 years
    This answer doesn't appear to have anything to do with the question?