我正在解析器上接收UDP信息,解析並存儲它。要做到這一點,我使用的是BinaryReader
,因爲它主要是二進制信息。其中一些將會是字符串。 MSDN says爲ReadString()
功能:BinaryReader ReadString指定長度?
從當前流中讀取一個字符串。該字符串的前綴長度爲 ,一次編碼爲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
,就是little endian),我通過它的3長度和相應的字母。但str
最終持有\0\0\0
。如果我刪除了3個零,只是有
byte[] data = new byte[] { 3, (byte)'C', (byte)'a', (byte)'t', }
然後,它讀取和存儲Cat
正常。對我來說,這與文檔的衝突說長度應該是一個整數。現在我開始認爲它們只是一個沒有小數位的數字,而不是數據類型int
。這是否意味着BinaryReader
永遠不會讀取大於127個字符的字符串(因爲這將是01111111對應於文檔的7位部分)?
我寫了一個協議,需要完全理解我將我們的文檔傳遞給我們的客戶之前要進入什麼。
BinaryReader旨在讀取用BinaryWriter寫出的內容。所以嘗試用BinaryWriter寫出不同長度的字符串,你應該能夠找出協議。 –
但是你最好弄清楚UDP協議是如何給你發送數據的,當它不在字符串的前面(這很可能),這是徒勞的。 –
http://msdn.microsoft.com/en-us/library/dd946975%28v=office.12%29。aspx – Ralf