Click here to Skip to main content
15,885,980 members
Articles / Programming Languages / C#
Article

Converting Hexadecimal String to/from Byte Array in C#

Rate me:
Please Sign up or sign in to vote.
4.71/5 (78 votes)
6 May 20032 min read 896.6K   14.4K   103   67
Provides and demonstrates a hexadecimal string encoding/decoding class

Sample Image

Introduction

While the .NET framework provides methods to convert a byte array into a Hexadecimal string ( byte.ToString(“X”) ), it is not so easy to convert a hexadecimal string back into a byte array. Such a function is useful when you need to backup data from your application on paper, such as an encryption key, and later, convert it back into data after the user types it in.

The HexEncoding class provided here, contains functions which allow for the conversion of a string in hexadecimal format into a byte array, and back. It also contains functions which lets you check the formatting of the string before conversion, and how many bytes a given string will produce.

Background

In a hexadecimal string, one byte is represented two hexadecimal characters. A hexadecimal character has a value of (A-F, 0-9).

e.g. string “01FFA0” is equivalent to byte[] { 1, 255, 160 }

Using the code

HexEncoding is the name of the class I created with static functions for hexadecimal string conversion.

Here’s a sample of how it is used, when the Convert button is clicked like on the screenshot:

C#
private void button1_Click(object sender, System.EventArgs e)
{
    string hexString = txtHex.Text;
    int discarded;
    txtByteCount.Text = ((int)HexEncoding.GetByteCount(hexString)).ToString();
    txtLength.Text = hexString.Length.ToString();
    byte[] byteArray = HexEncoding.GetBytes(hexString, out discarded);
    txtDiscard.Text = discarded.ToString();
    string temp = "";
    for (int i=0; i<byteArray.Length; i++)
    {
        temp += byteArray[i].ToString("D3") + " ";
    }
    txtByte.Text = temp;
    txtHex2.Text = HexEncoding.ToString(byteArray);
}

HexEncoding.GetByteCount(string hexString) returns the number of bytes that will be generated from the hexString.

HexEncoding.GetBytes(string hexString, out int discarded) returns the byte array converted from the hexString, and the second parameter returns the number of non-hexadecimal characters that were ignored in the string. This includes dashes, whitespace, and letters after ‘F’.

HexEncoding.ToString(byte[]) returns the newly converted byte array back into string form. Notice the ‘-‘ characters are now missing.

The key function provided by the framework to convert a hexadecimal string to a single byte is this:

C#
// byte newByte = byte.Parse(hex, System.Globalization.NumberStyles.HexNumber);

where “hex” is of the form “1A”, “00”, “FF”, etc.

Thanks to Polux on the .NET 247 newsgroups who posted the int.Parse(...) answer to another hexadecimal question.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralJust what I needed Pin
Joe Pardue16-Jun-05 5:05
Joe Pardue16-Jun-05 5:05 
GeneralGreatly Appreciated! Pin
Devon Knight13-Apr-05 13:58
Devon Knight13-Apr-05 13:58 
GeneralFastest I found.. Pin
Sven So.21-Mar-05 21:05
Sven So.21-Mar-05 21:05 
AnswerRe: Fastest I found.. Pin
tomstrummer28-Jul-07 7:07
tomstrummer28-Jul-07 7:07 
Generalincrease speed Pin
CyberDEF3-Feb-05 11:02
CyberDEF3-Feb-05 11:02 
Generalthanks a lot Pin
wilson_o23-Jan-05 16:46
susswilson_o23-Jan-05 16:46 
Generalabout discarded Pin
yzh_x9-Jan-05 16:42
yzh_x9-Jan-05 16:42 
GeneralThanks yeah :) Pin
Chua Wen Ching9-Sep-04 16:17
Chua Wen Ching9-Sep-04 16:17 
This articles had saves my time of coding the hex to bytes. Thanks again Smile | :) I love the stringbuilder part...
GeneralImprove performance Pin
Esteves15-Nov-03 17:05
Esteves15-Nov-03 17:05 
GeneralVery good Pin
mikeperetz5-Sep-03 11:11
mikeperetz5-Sep-03 11:11 
GeneralRe: Very good Pin
bobseadream9-May-04 5:58
bobseadream9-May-04 5:58 
GeneralPerformance improvement Pin
Patrik Reali3-Jul-03 5:37
Patrik Reali3-Jul-03 5:37 
GeneralRe: Performance improvement Pin
neilck3-Jul-03 6:59
neilck3-Jul-03 6:59 
GeneralRe: Performance improvement Pin
Volker von Einem6-Feb-07 3:34
Volker von Einem6-Feb-07 3:34 
GeneralThanks Pin
Jack Mandile24-Jun-03 15:26
Jack Mandile24-Jun-03 15:26 
GeneralAnother way Pin
Phillip Vetter13-May-03 0:31
Phillip Vetter13-May-03 0:31 
GeneralRe: Another way Pin
slick_bytes27-Nov-03 18:57
slick_bytes27-Nov-03 18:57 
GeneralRe: Another way using array of bytes Pin
Larry102425-Feb-04 5:05
Larry102425-Feb-04 5:05 
GeneralRe: Another way Pin
Pawel Krakowiak12-Feb-07 22:49
Pawel Krakowiak12-Feb-07 22:49 
GeneralYou can use System.Text.Encoding.ASCII.* too... Pin
Víctor Sánchez12-May-03 20:19
Víctor Sánchez12-May-03 20:19 
GeneralRe: You can use System.Text.Encoding.ASCII.* too... Pin
yizumi2-Dec-04 14:30
yizumi2-Dec-04 14:30 
GeneralCoincidentally, I wrote the same function a week ago Pin
crowdozer8-May-03 8:01
crowdozer8-May-03 8:01 
GeneralRe: Coincidentally, I wrote the same function a week ago Pin
neilck9-May-03 4:57
neilck9-May-03 4:57 
GeneralRe: Coincidentally, I wrote the same function a week ago Pin
Anonymous19-Mar-04 19:40
Anonymous19-Mar-04 19:40 
GeneralVery nice Pin
Marcin7-May-03 10:35
Marcin7-May-03 10:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.