据我了解,为了在 C# 中表示联合,我需要使用 StructLayout[LayoutKind.Explicit)] 和 [FieldOffset(x)] 属性来指定联合内的字节偏移量。但是,我有一个想要表示的以下联合,并且 FieldOffset attrib 仅按字节大小偏移。
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; }
}
等等。我还以为你想要 bool 在这里?
通常我会说:不要创建可变结构。调用may(我不确定)是一个有效的场景,所以我会忽略它:)
如果该值确实使用超过 32 位,请考虑将支持字段切换为 ulong。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)