Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 바이트 배열(Byte Array)을 문자열로 변환하는 방법

.NET에서 모든 문자열은 문자 집합(character set)과 인코딩(encoding)을 가지고 있습니다. 문자 인코딩이란 컴퓨터가 원시적인 0과 1의 데이터를 실제 문자로 해석하는 방법을 정의하는 규칙입니다. 일반적으로 숫자와 문자를 짝지어 매핑하는 방식으로 이루어지며, 본질적으로는 유니코드(Unicode) 문자들의 집합을 바이트 시퀀스로 변환하는 과정이라고 할 수 있습니다.

Encoding.GetString 메서드

C#에서는 Encoding.GetString(Byte[]) 메서드를 사용하여 지정된 바이트 배열의 모든 바이트를 문자열로 디코딩할 수 있습니다. 또한 Encoding 클래스에는 UTF8, Unicode(UTF-16), UTF32, ASCII 등 다양한 디코딩 방식이 제공되며, 이 클래스는 System.Text 네임스페이스에 포함되어 있습니다.

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

예제 코드

using System;
using System.Text;
namespace DemoApplication {
    public 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}");
            Console.ReadLine();
        }
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

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

주의사항: 인코딩 불일치 문제

중요한 점은 인코딩과 디코딩 양방향에서 동일한 인코딩 방식을 사용해야 한다는 것입니다. 예를 들어, 바이트 배열이 ASCII로 인코딩되었는데 UTF32로 문자열을 변환하려고 하면 원하는 문자열을 얻을 수 없습니다.

인코딩이 일치하지 않는 예제

using System;
using System.Text;
namespace DemoApplication {
    public class Program {
        static void Main(string[] args) {
            byte[] byteArray = Encoding.ASCII.GetBytes("Hello World");
            Console.WriteLine($"Byte Array is: {string.Join(" ", byteArray)}");
            string str = Encoding.UTF32.GetString(byteArray);
            Console.WriteLine($"String is: {str}");
            Console.ReadLine();
        }
    }
}

실행 결과

ASCII로 인코딩된 데이터를 UTF32로 잘못 디코딩하면 아래와 같이 의도하지 않은 출력이 나타납니다.

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

결론적으로, C#에서 바이트 배열을 문자열로 변환할 때는 Encoding.GetString() 메서드를 사용하되, 반드시 원본 데이터가 인코딩될 때 사용한 것과 동일한 인코딩 방식을 지정해야 올바른 결과를 얻을 수 있습니다.