2009-05-14 5 views
7

외부 엔터티에서받은 바이트 배열이 있습니다. 고정 크기입니다. 바이트 버퍼의 나머지 부분에서 패드에 0 값 유니 코드 문자열을 포함 :System.Text.Encoding.Unicode.GetString에서 Null 종료 문자열 가져 오기

그래서 바이트는 다음과 같을 수 있습니다

H \0 E \0 L \0 L \0 \0 \0 \0 \0 \0 ... etc 

내가 그 버퍼를 얻고과 같이 문자열로 변환하고 있습니다 :

"HELLO\0\0\0\0\0\0\0\0..." 

방법 CA :

byte[] buffer = new byte[buffSize]; 
m_dataStream.Read(buffer, 0, buffSize); 
String cmd = System.Text.Encoding.Unicode.GetString(buffer); 

은 내가 돌아 가야하는 것은 다음과 같습니다 문자열입니다 n GetString에게 첫 번째 유니 코드 null에서 문자열을 종료하도록 지시합니다 (즉, 단지 "HELLO"로 돌아갑니다)?

입력 해 주셔서 감사합니다. 당신이 나머지 모든 \ 0 있는지 경우

답변

8

이 작동합니다 :

cmd = cmd.TrimEnd('\0'); 

을 그렇지 않으면, 당신은 단지 첫 번째 널 전에 모든 것을 얻으려면 :

int index = cmd.IndexOf('\0'); 
if (index >= 0) 
    cmd = cmd.Remove(index); 

참고 Unicode.GetString은 double \ 0을 처리합니다. 당신은 단지 하나의 \ 0을 찾아야 만합니다.

1

가장 쉬운 방법은 이미 제안 된 것처럼 변환 후 문자열을 다듬는 것입니다.

미리 문자 수를 알고 있으면 트리밍하지 않고 올바른 문자열을 얻기 위해 시작 인덱스와 바이트 수를 취하는 GetString 오버로드를 사용할 수 있습니다.

문자 수를 미리 모르고 나중에 문자열을 자르지 않으려면 원하는 바이트 만 전달할 수 있도록 바이트 배열을 먼저 트림해야합니다. 유니 코드의 경우 첫 번째 0 쌍 뒤의 모든 바이트를 제거하는 것을 의미합니다.

관련 문제