使用c#的StrucLayout和FieldOffset表示联合位域
作者:互联网
我理解为了在C#中表示联合,我需要使用StructLayout [LayoutKind.Explicit]]和[FieldOffset(x)] attribut来指定联合内部的字节偏移量.但是,我有一个我想要表示的跟随联合,而FieldOffset属性仅偏移一个字节的大小.
union _myUnion
{
unsigned int info;
struct
{
unsigned int flag1:1 // bit 0
unsigned int flag2:1 // bit 1
unsigned int flag3:1 // bit 2
unsigned int flag4:1 // bit 3
unsigned int flag5:1 // bit 4
unsigned int flag6:1 // bit 5
.
.
.
unsigned int flag31:1 // bit 31
}
}
正如你在联合中看到的内部结构一样,我不能使用FieldOffset,因为我需要一些可以稍微偏移的东西.
这个问题有方法解决吗?我试图调用一个DLL函数,其中一个数据结构被定义为这样,我没有关于如何最好地表示这个联合结构的想法.
解决方法:
那里不需要工会;数据的一个字段属性,8个按位“移位”操作的属性,例如:
public uint Value {get;set;}
public uint Flag2 {
get { return Value >> 2; }
}
等我还以为你想要布尔这里?
通常我会说:不要制作可变的结构. PInvoke可能(我不确定)是一个有效的场景,所以我会忽略它:)
如果该值真正使用超过32位,请考虑将支持字段切换为ulong.
标签:c,union,bit-fields 来源: https://codeday.me/bug/20190518/1128887.html