C#中的C位字段

Dav*_*vid 10 c c# bit-manipulation code-conversion

我需要将C结构转换为使用位字段的C#.

typedef struct foo  
{  
    unsigned int bar1 : 1;
    unsigned int bar2 : 2;
    unsigned int bar3 : 3;
    unsigned int bar4 : 4;
    unsigned int bar5 : 5;
    unsigned int bar6 : 6;
    unsigned int bar7 : 7;
    ...
    unsigned int bar32 : 32;
} foo;
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

小智 5

正如本答案本MSDN文章中所述,您可能正在寻找以下内容而不是aBitField

[Flags]
enum Foo
{
    bar0 = 0,
    bar1 = 1,
    bar2 = 2,
    bar3 = 4,
    bar4 = 8,
    ...
}
Run Code Online (Sandbox Code Playgroud)

因为计算到2 32可能有点烦人,你也可以这样做:

[Flags]
enum Foo
{
    bar0 = 0,
    bar1 = 1 << 0,
    bar2 = 1 << 1,
    bar3 = 1 << 2,
    bar4 = 1 << 3,
    ...
}
Run Code Online (Sandbox Code Playgroud)

您可以像在C中期望的那样访问您的标志:

Foo myFoo |= Foo.bar4;
Run Code Online (Sandbox Code Playgroud)

.NET 4中的C#会使用该HasFlag()方法抛出一个骨骼.

if( myFoo.HasFlag(Foo.bar4) ) ...
Run Code Online (Sandbox Code Playgroud)


Nek*_*esh 3

您可以将该BitArray类用于框架。看看msdn的文章。