我们可以像 C++ 一样在 C# 结构中使用半字节吗? C# 中是否有任何等效代码?
typedef struct PHeader {
#if defined(LITTLE_ENDIAN)
uint8_t mHdrLen :4;
uint8_t mVer :4;
#elif defined (BIG_ENDIAN)
uint8_t mVer :4;
uint8_t mHdrLen :4;
#endif
}
谢谢。
最佳答案
您可以使用 [StructLayout(LayoutKind.Explicit)]
和 FieldOffset
属性实现相同的结果。您可以阅读更多相关信息 here和 here .
但请注意,FieldOffset
以字节为单位,而不是位。
[StructLayout(LayoutKind.Explicit)]
struct X
{
#if A
[FieldOffset(0)] public byte a;
[FieldOffset(1)] public byte b;
#else
[FieldOffset(0)] public byte b;
[FieldOffset(1)] public byte a;
#endif
}
例子:
unsafe
{
short x = 12300;
X* y = (X*)&x;
X t = *y;
Console.WriteLine(t.a + " - " + t.b);
}
如果您使用未定义的 A 运行该代码,您将获得结果 48 - 12
但如果您使用 #define A
,则您将获得结果 12 - 48
。
关于c# - 在结构 C# 中使用半字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754909/