在structc中使用半字节# 我们能像C++那样使用C语言结构中的小写吗? C#中是否有等效代码

在structc中使用半字节# 我们能像C++那样使用C语言结构中的小写吗? C#中是否有等效代码,c#,c++,struct,C#,C++,Struct,谢谢。您可以使用[StructLayout(LayoutKind.Explicit)]和字段偏移量属性获得相同的结果。你可以阅读更多关于它的信息 但请注意,FieldOffset以字节单位工作,而不是位 [StructLayout(LayoutKind.Explicit)] struct X { #if A [FieldOffset(0)] public byte a; [FieldOffset(1)] public byte b; #else [FieldOffset(

谢谢。

您可以使用
[StructLayout(LayoutKind.Explicit)]
字段偏移量
属性获得相同的结果。你可以阅读更多关于它的信息

但请注意,
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
,但如果您
#定义了一个
,则您将得到结果
12-48

可能的重复
unsafe
{
    short x = 12300;
    X* y = (X*)&x;
    X t = *y;

    Console.WriteLine(t.a + " - " + t.b);
}