본문 바로가기

공부중/작업하기

[C#] Byte Array - String 데이터 전송 시 주의사항

C#에서 Byte 배열을 String으로 String을 Byte 배열로 변환해야 하는 일이 종종 일어난다.

이때, 주의할 사항이 있는데 C#에서 Byte 배열을 String으로 변환할 때 주로 아래와 같은 형식을 사용하게 되는데,

 

string temp = Encoding.Default.GetString(Byte[]);

 

이때 Byte[] 뒷부분에 0으로 채워져 있을 경우 String 형식은 그냥 잘라버리는 게 아니라 \0 값으로 채워진 String으로 변환하게 된다.

 

예를 들어,

byte[]  byteArr = {'a', 'b', 'c', 0, 0}; 일 경우

string temp = Encoding.Default.GetString(byteArr); 을 하게 되면,

temp 값은 'abc\0\0'으로 생성된다.

 

해결 방법은 GetString(array, index, count) 이렇게 인자를 정확히 넣어서 문자열이 끝나는 부분까지 지정해주면 괜찮지만 때로 '\0' 값의 영향을 받아 콘솔 로그로 출력되지 않는 문제를 겪을 수 있다. (로그 출력 시 오류 발생)

다른 방법으로는 String 변환 시 TrimEnd 메서드를 사용하여 해결하는 방법이 있다.

string temp = Encoding.Default.GetString(byteArr).TrimEnd('\0'); 를 하게 되면 '\0'의 문자를 제한 문자열 값을 가질 수 있게 된다.