我有多个结构,它们都以头结构开头。像这样
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++中的联合做同样的事情呢?
发布于 2012-04-24 22:39:37
Byte[]是引用类型字段,您不能将其与值类型字段覆盖。你需要一个固定大小的缓冲区,并且你需要用/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];
};https://stackoverflow.com/questions/10299978
复制相似问题