簡體   English   中英

如何最好地處理C#中的位數據?

[英]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.1Protobuf即可 專家已經解決了這個問題。 利用他們的技能和知識。 另外,使用標准協議可以使第三方更輕松地實現自定義接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM