How to convert byte array to string in C#?

In C#, converting a byte array to a string requires understanding character encoding. Every string has a character set and encoding that tells the computer how to interpret raw bytes into characters. The Encoding class provides various methods to decode byte arrays into strings.

The most common approach is using the Encoding.GetString() method, which decodes all bytes in a specified byte array into a string. Several encoding schemes are available such as UTF8, Unicode, UTF32, and ASCII.

Syntax

Following is the basic syntax for converting byte array to string −

string result = Encoding.EncodingType.GetString(byteArray);

Where EncodingType can be UTF8, ASCII, Unicode, UTF32, or Default.

Using Default Encoding

The Encoding.Default uses the system's default encoding scheme −

using System;
using System.Text;

class Program {
    static void Main(string[] args) {
        byte[] byteArray = Encoding.Default.GetBytes("Hello World");
        Console.WriteLine($"Byte Array is: {string.Join(" ", byteArray)}");
        string str = Encoding.Default.GetString(byteArray);
        Console.WriteLine($"String is: {str}");
    }
}

The output of the above code is −

Byte Array is: 72 101 108 108 111 32 87 111 114 108 100
String is: Hello World

Using Different Encoding Types

Here are examples of converting byte arrays using different encoding schemes −

using System;
using System.Text;

class Program {
    static void Main(string[] args) {
        string original = "Hello C#";
        
        // UTF8 encoding
        byte[] utf8Bytes = Encoding.UTF8.GetBytes(original);
        string utf8String = Encoding.UTF8.GetString(utf8Bytes);
        Console.WriteLine($"UTF8: {utf8String}");
        
        // ASCII encoding
        byte[] asciiBytes = Encoding.ASCII.GetBytes(original);
        string asciiString = Encoding.ASCII.GetString(asciiBytes);
        Console.WriteLine($"ASCII: {asciiString}");
        
        // Unicode encoding
        byte[] unicodeBytes = Encoding.Unicode.GetBytes(original);
        string unicodeString = Encoding.Unicode.GetString(unicodeBytes);
        Console.WriteLine($"Unicode: {unicodeString}");
    }
}

The output of the above code is −

UTF8: Hello C#
ASCII: Hello C#
Unicode: Hello C#

Encoding Mismatch Example

It is crucial to use the same encoding for both conversion directions. Using different encodings can result in corrupted or unreadable text −

using System;
using System.Text;

class Program {
    static void Main(string[] args) {
        byte[] byteArray = Encoding.ASCII.GetBytes("Hello World");
        Console.WriteLine($"Byte Array is: {string.Join(" ", byteArray)}");
        
        // Wrong: Using UTF32 to decode ASCII bytes
        string wrongStr = Encoding.UTF32.GetString(byteArray);
        Console.WriteLine($"Wrong encoding result: '{wrongStr}'");
        
        // Correct: Using ASCII to decode ASCII bytes
        string correctStr = Encoding.ASCII.GetString(byteArray);
        Console.WriteLine($"Correct encoding result: '{correctStr}'");
    }
}

The output of the above code is −

Byte Array is: 72 101 108 108 111 32 87 111 114 108 100
Wrong encoding result: '???'
Correct encoding result: 'Hello World'

Comparison of Encoding Methods

Encoding Type Description Use Case
UTF8 Variable-length encoding, 1-4 bytes per character Web applications, international text
ASCII Single-byte encoding for English characters Simple English text, legacy systems
Unicode UTF-16 encoding, 2 or 4 bytes per character Windows applications, .NET default
UTF32 Fixed 4-byte encoding Applications requiring fixed-width characters

Conclusion

Converting byte arrays to strings in C# requires matching the encoding used to create the byte array. Always use the same encoding type for both GetBytes() and GetString() operations to ensure data integrity and avoid corrupted text output.

Updated on: 2026-03-17T07:04:36+05:30

20K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements