나는 파서에서 UDP 정보를 받고 파싱하고 저장하고있다. 그렇게하려면 대부분 이진 정보이므로 BinaryReader
을 사용하고 있습니다. 그 중 일부는 문자열이 될 것입니다. ReadString()
의 경우 MSDN says function :BinaryReader 길이를 지정하는 ReadString?
현재 스트림에서 문자열을 읽습니다. 문자열의 접두사는 이며, 한 번에 7 비트 씩 정수로 인코딩됩니다.
그리고 나는 테스트를 시작할 때까지 단순히 무시하려고 시도한 "한 번에 7 비트"까지 완전히 이해합니다. MemoryStream
에 넣기 전에 자신의 바이트 배열을 만들고 BinaryReader
으로 읽으려고합니다. 여기에 내가 처음 일 것이라고 생각 무엇 :
byte[] data = new byte[] { 3, 0, 0, 0, (byte)'C', (byte)'a', (byte)'t', }
BinaryReader reader = new BinaryReader(new MemoryStream(data));
String str = reader.ReadString();
가 int
4 바이트입니다 알고 (주위 충분히 BinaryReader
리틀 엔디안인지를 확인하려면 놀겠) 내가 3의 길이와 해당 문자를 전달합니다. 그러나 str
은 \0\0\0
을 유지합니다. 나는 3 0을 제거하고 단지
byte[] data = new byte[] { 3, (byte)'C', (byte)'a', (byte)'t', }
이있는 경우 그 다음 읽고 제대로 저장 Cat
을. 나에게 이것은 길이가 정수라고 말하는 문서와 충돌한다. 이제는 데이터 형식이 int
이 아닌 소수점 이하의 숫자를 의미한다고 생각하기 시작했습니다. 이것은 BinaryReader
이 127 문자보다 큰 문자열을 읽을 수 없다는 것을 의미합니까 (이는 설명서의 7 비트 부분에 해당하는 01111111이 될 것입니다)?
나는 프로토콜을 작성 중이며 우리의 문서를 고객에게 전달하기 전에 내가 무엇을 얻고 있는지 완전히 이해할 필요가있다.
BinaryReader는 BinaryWriter로 작성된 내용을 읽도록 설계되었습니다. 그래서 BinaryWriter로 다른 길이의 문자열을 쓰는 시도하고 당신은 프로토콜을 알아낼 수 있어야합니다. –
하지만 문자열 앞에 접두어가 붙지 않을 때 UDP 프로토콜이 어떻게 데이터를 보내는 지 알아 내야합니다. 그럴 가능성이 가장 큽니다. 모두 헛된 것입니다. –
http://msdn.microsoft.com/en-us/library/dd946975%28v=office.12%29.aspx – Ralf