gpt4 book ai didi

c# - 在结构 C# 中使用半字节

转载 作者:行者123 更新时间:2023-11-30 05:20:15 26 4
gpt4 key购买 nike

我们可以像 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 属性实现相同的结果。您可以阅读更多相关信息 herehere .

但请注意,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com