簡體   English   中英

使用StructLayout在c#中聯合

[英]Union in c# with StructLayout

我有多個結構,都以頭結構開頭。 像這樣

public struct BaseProtocol {
    public Header header;
    public Footer footer;
};

標題是

public struct Header {
    public Byte start;
    public Byte group;
    public Byte dest;
    public Byte source;
    public Byte code;
    public Byte status;
};

現在的問題是我需要將它們與Byte []結合起來。 我試過這個

[StructLayout( LayoutKind.Explicit, Size=255 )]
public struct RecBuffer {

    [FieldOffset( 0 )]
    public Header header;

    [FieldOffset( 0 )]
    [MarshalAs( UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 255 )]
    public Byte[] buffer;
};

當我用緩沖區填充數據時,我無法從標題中獲取數據。 如何使c#與c ++中的union相同?

字節[]是引用類型字段,您不能使用值類型字段覆蓋它。 您需要一個固定大小的緩沖區,您需要使用/unsafe編譯它。 像這樣:

[StructLayout(LayoutKind.Explicit, Size = 255)]
public unsafe struct RecBuffer
{

    [FieldOffset(0)]
    public long header;

    [FieldOffset(0)]
    [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 255)]
    public fixed Byte buffer[255];
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM