2010-08-12 5 views
2

어떤 이유로 BeginReceive의 바이트 배열 출력이 Null로 채워진 다음 데이터로 채워집니다.바이트 배열에서 null을 제거하는 방법은 무엇입니까?

BeginReceive :

AsyncResult = connectSocket.BeginReceive(RecvBuffer2, 
              0, RecvBuffer2.Length, 
              SocketFlags.None, 
              OnDataRecvCallback, null); 

바이트 배열 선언 :

public static byte[] RecvBuffer2 = new byte[9999]; 

어떻게 널 (null)을 제거하고 나머지 데이터를 유지하기 위해?

+0

'실제'데이터는 0x00으로 시작할 수 있습니까? 어떤 종류의 데이터를 기대하십니까? –

+0

불가능합니다. 일반 텍스트 (ascii) 데이터입니다. – lesderid

+0

그래도 바이트 순서 표시에는주의해야합니다. –

답변

3

LINQ로 할 수 있어야합니다. 테스트되지 않은, 내가 지금 사용 가능한 비주얼 스튜디오가없는,하지만 이런 식으로 뭔가해야하기 때문에 :

var usefulBuffer = RecvBuffer2.SkipWhile(x => x == 0).ToArray() 
+0

이 답변은 효과가 있었지만 배열을 작동시키기 위해 Reverse (SkipWhile 전후)를해야했습니다. 고맙습니다. 답변을 수락했습니다! – lesderid

+0

희미한 newBuffer1 = newBuffer.SkipWhile (x => x == 0) .ToArray() 위의 오류가 == 인 경우 오류가 표시됩니다. – picnic4u

+0

@ picnic4u : VB 구문은'SkipWhile (Function (x) x = 0)'입니다. – Heinzi

0
우리는 Heinzi의 대답을 수정할 수 있습니다

RecvBuffer2= RecvBuffer2.Where(x => x != 0).ToArray(); 

에 이제 반전 할 필요가 없다 정렬.

솔루션 키는 C# 술어입니다.

관련 문제