(C#)有没有办法通过指针设置单个位的值?

时间:2009-07-26 05:35:11

标签: c# .net pointers

我的意思是:想象一下,我们有一个8字节变量,具有高值和低值。我可以使一个指针指向高4字节,其他指向低4字节,并设置/检索它们的值没有问题。现在,有没有办法获取/设置小于一个字节的值?如果不是将它分成两个4字节的“变量”,我想要考虑八个1字节变量,我可以使用bool,但c#中没有定义的较小变量。是否可以用指针将它分成16?甚至在32,64?这不对吗?

这是一个非常学术性的问题,我知道这可以通过bitshiffting,联盟(Struct.Explicit)等来实现。谢谢!

1 个答案:

答案 0 :(得分:2)

不,C#不支持位字段,字节是可寻址内存的最小量。您可以手动提供更改一个或多个特定位的属性,但您必须自己提供打包/解包逻辑:

public bool Bit5 {
    get { return (field & 32) != 0; }
    set { if (value) field |= 32; else field &= ~32; }
}

顺便说一下,我不知道你是如何使用LayoutKind.Explicit实现它的,因为你可以指定的最小FieldOffset是一个字节

作为旁注,即使是能够通过位字段执行此操作的C ++,也只是隐藏按位技巧,并使编译器代替您执行此操作。你无法从内存中获取少于一个字节的内容到寄存器,至少在x86架构上是这样。