[英]How to best handle bit data in C#?
我試圖實現包含不同數據的不同信號,並在C#中實現了各種數據類型以整潔地管理數據(主要是結構,一些枚舉)。 這些類型中的大多數大小都奇怪,例如有些是9位或3位等。
我將它們實現為最接近的等效C#基本類型(大多數為byte,ushort或short,以及一些ints和uint)。
在C#中處理此類數據類型的一般方法是什么? 最后,我必須將所有位組合成一個字節數組,但是我不確定如何將它們組合在一起。
我考慮過使用BitConverter獲取每種類型的字節數組,並將所有數據作為布爾值放入一個BitArray中,然后我可以將其轉換回字節數組。 但是我似乎無法拆分字節數組。
做到這一點的另一種方法是移動我擁有的每個變量,但這似乎真的很骯臟。 如果將來將類型從32位更改為31位,則看起來很麻煩。
通常如何做? 有什么最佳做法嗎?
基本上我想將不同大小的數據合並到一個字節數組中。 例如,將3位變量,2位布爾值和11位值打包到2個字節中。
由於我將類型實現為C#類型,因此可以執行BitArray arr = new BitArray(BitConverter.GetBytes((short)MyType))
,但這將給我16位,而MyType
可能只有9位。
我的任務只是在C#中將數據結構和打包實現為二進制數據
要顯式操縱結構的內存中布局:
使用StructLayout
。 通常,僅在處理互操作或專用內存約束時才合適。 有關示例/文檔,請參見MSDN 。 請注意,如果您的數據未按字節對齊,則會對性能造成影響。
設計數據結構:
只需使用現有的解決方案,例如ASN.1或Protobuf即可 。 專家已經解決了這個問題。 利用他們的技能和知識。 另外,使用標准協議可以使第三方更輕松地實現自定義接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.