如何最好地处理C#中的位数据?

时间:2019-01-08 20:11:49

标签: c# bit binary-data

我正在尝试实现包含不同数据的不同信号,并且我在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位。

1 个答案:

答案 0 :(得分:0)

  

我的任务只是实现数据结构和打包为   C#中的二进制数据

要显式操纵结构的内存布局:

使用StructLayout。通常,仅在处理互操作或专用内存约束时才合适。有关示例/说明,请参见MSDN。请注意,如果您的数据未按字节对齐,则会对性能造成影响。

要设计数据结构:

只需使用现有的解决方案,例如ASN.1Protobuf。专家已经解决了这个问题。利用他们的技能和知识。另外,使用标准协议可以使第三方更轻松地实现自定义接口。

相关问题