Ian*_*son 5 c# union bit-fields
我理解为了在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
}
}
Run Code Online (Sandbox Code Playgroud)
正如你在联合中看到的内部结构一样,我不能使用FieldOffset,因为我需要一些可以稍微偏移的东西.
这个问题有方法解决吗?我试图调用一个DLL函数,其中一个数据结构被定义为这样,我没有关于如何最好地表示这个联合结构的想法.
那里不需要工会;数据的一个字段+属性,8个执行按位“移位”操作的属性,例如:
public uint Value {get;set;}
public uint Flag2 {
get { return Value >> 2; }
}
Run Code Online (Sandbox Code Playgroud)
等等。我还以为你想要 bool 在这里?
通常我会说:不要创建可变结构。PInvoke可能(我不确定)是一个有效的场景,所以我会忽略它:)
如果该值确实使用超过 32 位,请考虑将支持字段切换为 ulong。
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |