[英]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.