【发布时间】:2012-05-05 05:04:56
【问题描述】:
我有多个结构都以标头结构开头。像这样
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 一样?
【问题讨论】:
-
“我无法从标题中获取数据”是什么意思?你有例外吗?你得到不正确的数据吗?您尝试从哪个字段访问标头,
header或buffer字段? -
我把它放在缓冲区中:{ 0xe0 0x11 0x11 0x00 0x05 0x00 } 但是当我这样做时,recBuffer.header.start 是 0x00 而不是 0xe0。
标签: c# union structlayout