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);

예를 들어 byte배열 길이는 5이지만 실제 문자는 3자가 들어간 상황에서 string을 만들면 길이가 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 국제 라이선스 에 따라 이용할 수 있습니다.

2개의 댓글

댓글 남기기

이메일 주소를 발행하지 않을 것입니다.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.