[英]Byte Array & binary reading - Debug environment for testing/development?
我(接近)對這個主題完全陌生,並且閱讀了很多關於此的內容。 書籍、Stackexchange、博客等。 你知道,開發人員的共同點。 我覺得當您可以調試和測試自己閱讀的內容時,更容易實現“大局理解”。 我找到了很多理論信息,但嘗試“拔下”的實用方法卻較少。
到目前為止,我的想法大致是這樣的: byte[]
, BitConverter.GetBytes
/ BitConverter.ToInt32
, Encoding.UTF8.GetString()
與數組開始的某種位置一起在這里大量涉及。 就好像數據報中的前 4 個字節包含一個 msg,然后 startindex 將是 4 的 sessionid? 出於這個目的,所有這些都像是沉重的東西。
有沒有更好的方法來打包/解包這樣的 arrays? 消息/數據報的大小最大為 64kb,並且從未擴展到不同的消息。
更具體地說:我想模擬(控制台應用程序,即)傳入數據包並解壓縮到對我的系統有用的信息。 然后相反,將答案傳輸回字節數組。 用於此目的的良好樣品 class 看起來/如何處理? 如何編碼/解碼成它? 協議規范具有數據包的固定字節。 我將在下面留下一個例子(雖然不是來自真實的規范);
// One Packet
//
// Description -> |Identifier|name length|message length| name | message |
// Size in bytes -> | 4 | 4 | 4 |name length|message length|
在大多數情況下,您不會自己讀/寫二進制信息。 有幾個框架可以將類/結構序列化到二進制數據/從二進制數據序列化。 BinaryFormatter
或protobuf是兩種方式。
但是,如果您想自己嘗試一下,我建議您只使用FileStream
,因為它與任何其他 stream 完全相同(有點簡化的陳述,但幾乎是真的;)使用BinaryWriter
寫入信息並使用BinaryReader
讀取。
沒有理由直接處理byte[]
數組。 您始終可以使用它初始化MemoryStream
以獲得對BinaryReader
和BinaryWriter
的訪問權限
重要的是您以完全相同的順序讀取/寫入字段。
使用您更新的問題的示例:
// Description -> |Identifier|name length|message length| name | message |
// Size in bytes -> | 4 | 4 | 4 |name length|message length|
using (var stream = new MemoryStream(yourByteBuffer))
{
using (reader = new BinaryReader(stream))
{
var identifier = reader.ReadInt32();
var nameLength = reader.ReadInt32();
var msgLength = reader.ReadInt32();
var name = reader.ReadChars(nameLength);
var msg = reader.ReadChars(msgLength);
}
}
// to get a string from the chars:
var message = new string(msg);
System.IO
包含用於處理文件和字節流的類型。 其中許多包括示例,例如。 打開文件以讀取為字節 Stream: FileStream Constructor (String, FileMode) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.