我有一个需要填充并写入磁盘(实际上有几个)的结构。
例如:
byte-6
bit0 - original_or_copy
bit1 - copyright
bit2 - data_alignment_indicator
bit3 - PES_priority
bit4-bit5 - PES_scrambling control.
bit6-bit7 - reserved
在C语言中,我可能会做以下的事情:
struct PESHeader {
unsigned reserved:2;
unsigned scrambling_control:2;
unsigned priority:1;
unsigned data_alignment_indicator:1;
unsigned copyright:1;
unsigned original_or_copy:1;
};
有没有办法在C#中实现这一点,使我能够使用结构体解引用点运算符访问位?
对于一些结构,我可以只是做一些位移再包装在访问器函数中。
我有很多这种处理结构的需求,所以我正在寻找更易于阅读和编写的方法。
IBitfield
(没有成员),则可以将PrimitiveConversion
类转换为任何实现IBitfield
的结构的扩展方法。例如:public static long ToLong(this IBitfield obj) {}
。然后,ToLong()
方法将出现在Intellisense中,适用于IBitfield
对象。 - Kevin P. RiceGetFields
可能会因为反射缓存而导致重排序,但通过按 'MetadataToken' 进行排序应该可以解决这个问题(您可以通过混合获取单个字段和获取所有字段来复现此问题)。 - firda