C#에서 byte[]를 string으로 변환 할때 주의 할점

C#에서 byte배열을 string으로 변환할때 주로

string tmpSTR = Encoding.Default.GetString(바이트배열);

이렇게 쓰라고 많이 나오는데 주의해야 할점이 byte[] 뒷부분에 0으로 채워져 있을경우 그냥 잘라버리는게 아니라
\0 값으로 채워진 string이 생깁니다.

byte[] tmp = new byte[5];
tmp[0]= 'a';
tmp[1]= 'b';
tmp[2]= 'c';
tmp[3]= 0;
tmp[4]= 0;
string tmpSTR = Encoding.Default.GetString(tmp);

이런 상황에서 사용하면 길이 3짜리 tmpSTR이 나오는게 아니라 길이5짜리 abc\0\0이 생성되더군요.

GetString(array, index, count) 이렇게 인자 넣어서 정확히 문자열 끝나는 부분까지만 잘라내면 별 문제 없지만
별 생각 없이 쓰다 보니 Console.Write 함수를 쓸때  \0 값이 영향을 줘서 이 배열 이후에 Console.Write() 가 출력되지 않는 문제를 발생합니다. (첨엔 Console.Write 함수에 뭔가 문제 있는줄 알았음)

쉽게 할려면 뒤에 .TrimEnd(‘\0’)을 붙여주면 됩니다.

string tmpSTR = Encoding.Default.GetString(바이트배열).TrimEnd('\0');

귀찮게(?) 할려면 byte[] 돌면서 0부분 위치 찾아서 인자로 넣어주면 되고요.


크리에이티브 커먼즈 라이선스Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.