关于StructLayoutAttribute类的疑问

古兰色回忆 2012-09-26 03:54:13
新换了一个工作,遇到了软件和硬件使用Socket交换信息,而信息形式则是使用的byte数组,但是在熟悉代码的时候,却发现了这么一段代码。

/// <summary>
/// 信息头
/// </summary>
[Serializable]
[StructLayoutAttribute(LayoutKind.Sequential,CharSet.Ansi,Pack=1)]
public struct MessageHead
{
/// <summary>
/// 功能码枚举
/// </summary>
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
public byte OperationCode;

/// <summary>
/// 数据类型
/// </summary>
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
public byte DataType;

/// <summary>
/// 帧ID号
/// </summary>
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.U2,SizeConst=2)]
public ushort FrameID;

/// <summary>
/// 保留(存储返回结果)
/// </summary>
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.U1,SizeConst=1)]
public byte Retain;

/// <summary>
/// 数据长度
/// </summary>
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.U4,SizeConst=4)]
public uint DataLength;

}

实际效果是这个结构可以使用Marshal等类中的方法转换为一个byte数组,虽然知道了怎么使用,但是却不太明白是怎么一回事,在MSDN上也是很简单的写了一句话“类使用户可以控制类或结构的数据字段的物理布局”。
这个类到底是怎么样的一个机制,哪位高人可以给详细的说明一下,或者给一些相关的资料。
...全文
202 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
古兰色回忆 2012-10-11
  • 打赏
  • 举报
回复
真是残念啊……
bdmh 2012-09-26
  • 打赏
  • 举报
回复
非托管封送,如果帮助你还理解不了,我们也没有什么语言让你明白,你甚至可以记住他,知道什么时候用也可以

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧