String to Byte Array Conversion in C#

By FoxLearn 2/5/2025 9:49:40 AM   14
This tutorial will explore how to convert strings to byte arrays and vice versa in C#.

What is a String in C#?

In C#, a string is a sequence of characters.

For example, string greeting = "Hello, World!"; represents the text "Hello, World!" stored in the variable greeting.

Understanding Byte Arrays in C#

In C#, a byte array is a collection of bytes, which are units of digital information.

For example, byte[] byteArray = new byte[5]{1, 2, 3, 4, 5}; defines a byte array with 5 elements, where each element is a byte value.

How to convert string to UTF-8 bytes in C#?

To convert a string to UTF-8 bytes in C#, you can use the Encoding.UTF8.GetBytes() method.

For example:

// Your string
string str = "Hello, World!";
        
// Convert the string to UTF-8 bytes
byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);

How to Convert a Byte Array to a String in C#?

To convert a byte array to a string in C#, you can use the Encoding class, specifically Encoding.UTF8.GetString() if the byte array is in UTF-8 encoding.

// A byte array representing a UTF-8 encoded string
byte[] byteArray = new byte[] { 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33 };
        
// Convert byte array to string using UTF-8 encoding
string str = Encoding.UTF8.GetString(byteArray);
        
// Print the resulting string
Console.WriteLine(str);  // Output: Hello, World!

How to Convert Byte Array to Hex String in C#?

To convert a byte array to a hex string in C#, you can use the BitConverter.ToString method, which converts each byte in the array to its hexadecimal representation.

// Example byte array
byte[] byteArray = new byte[]{65, 66, 67, 68, 69};

// Convert byte array to hex
string hex = BitConverter.ToString(byteArray).Replace("-", "");
Console.WriteLine(hex);  // Output: "4142434445"

In the example above, BitConverter.ToString(byteArray) converts the byte array into a string of hexadecimal values, and .Replace("-", "") removes the hyphens that separate the byte values.

Common Mistakes to Avoid When Converting String to Byte Array in C#

It’s important to keep a watchful eye on common errors when working with conversions, as it can save time and frustration.

1. Failure to Specify the Correct Encoding

Encoding refers to the process of converting characters into byte sequences. When converting a string to a byte array, choosing the wrong encoding can produce unexpected results.

string specialChar = "á";
byte[] byteArray1 = Encoding.ASCII.GetBytes(specialChar);
byte[] byteArray2 = Encoding.UTF8.GetBytes(specialChar);

Console.WriteLine(byteArray1[0]);  // Output: 63
Console.WriteLine(byteArray2[0]);  // Output: 195

In this case, the ASCII encoding cannot handle the character "á", replacing it with a question mark (ASCII value 63). UTF8 encoding correctly represents "á" with a value of 195.

2. Misunderstanding Different Encoding Types

Different encodings handle characters in different ways. For example, ASCII supports basic English characters, while UTF-8 covers a broad spectrum of international characters, symbols, and emojis.

string emoji = "😊";
byte[] byteArray1 = Encoding.ASCII.GetBytes(emoji);
byte[] byteArray2 = Encoding.UTF8.GetBytes(emoji);

Console.WriteLine(byteArray1.Length);  // Output: 1
Console.WriteLine(byteArray2.Length);  // Output: 4

In the example above, the byte array using ASCII encoding only stores a question mark, while the UTF-8 array accurately captures the emoji using four bytes.

3. Erroneous One-to-One Char-Byte Assumption

A common misconception is that each character in a string will always translate into one byte in a byte array. But this isn’t always true, especially when using encodings like UTF-8.

string text = "World!";
byte[] byteArray = Encoding.UTF8.GetBytes(text);

Console.WriteLine(text.Length);       // Output: 6
Console.WriteLine(byteArray.Length);  // Output: 6

Although the string has 6 characters, the byte array may have a different size depending on the encoding.

Troubleshooting String and Byte Conversion Errors

Sometimes your conversions might not go as planned.

Here are some ways to debug and troubleshoot common issues:

The Non-ASCII Characters Check

If your string contains non-ASCII characters, using ASCII encoding can lead to incorrect results.

string foreignText = "Café";
byte[] incorrectByteArray = Encoding.ASCII.GetBytes(foreignText);
byte[] correctByteArray = Encoding.UTF8.GetBytes(foreignText);

Console.WriteLine(incorrectByteArray.Length);  // Output: 5
Console.WriteLine(correctByteArray.Length);    // Output: 5

Even though both byte arrays have the same length, only correctByteArray represents the original string correctly when using UTF-8.

Using the Correct Encoding

Using the wrong encoding is a common mistake that leads to misinterpretations of the string. Here's how encoding issues may arise:

string musicalText = "🎵 Music";
byte[] incorrectByteArray = Encoding.ASCII.GetBytes(musicalText);
byte[] correctByteArray = Encoding.UTF8.GetBytes(musicalText);

Console.WriteLine(Encoding.ASCII.GetString(incorrectByteArray));  // Output: ? Music
Console.WriteLine(Encoding.UTF8.GetString(correctByteArray));     // Output: 🎵 Music

As you can see, ASCII encoding incorrectly transforms the musical note symbol into a question mark, while UTF-8 preserves the original emoji.

Whether you’re working with strings, emojis, or special characters, converting between byte arrays and hex strings in C# can be straightforward if you use the right encoding and handle potential pitfalls with care.