[MarshalAs(UnmanagedType.I4)]
此属性标识 int类型 长度为4字节
int有好几种:Int16 Int32 Int64
意义同名,分别占16位,32位,64位
8位一字节,所以分别占2字节,4字节,8字节
C#对整数做了基元类型:
short映射Int16
int映射Int32
long映射Int64
int即Int32
即:4字节
//消息结构体
[Serializable] // 指示可序列化
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct sMessage
{
//聊天主题Id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
public char[] ChatTopicID;
//聊天消息Id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
public char[] ChatMessageID;
//消息类型 0:错误 1:消息 2:文件 3:登录 4::获取登录用户 5:窗口抖动 6:广播消息 7:消息发送失败......
[MarshalAs(UnmanagedType.I4)]
public int MsgAction;
//发送用户的Id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
public char[] SendUserID;
//接收用户的Id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
public char[] ReceiveUserID;
//消息长度 去除头后的长度
[MarshalAs(UnmanagedType.I4)]
public int MsgLen;
//当前包次序(如果是文件的话)
[MarshalAs(UnmanagedType.I4)]
public int MsgIndex;
//消息包的个数 (如果是文件的话)
[MarshalAs(UnmanagedType.I4)]
public int MsgNum;
//消息发送时间 2016-01-11 14:15:01
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)]
public char[] TimeStamp;
//消息发送时间 20160111141501+3位毫秒+(100-999)随机数 sss (2016-01-11 14:15:01 fff)
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] FileName;
//初始化
public sMessage(string _ChatTopicID, string _ChatMessageID, string _SendUserID, string _ReceiveUserID, string MsgStr, string _FileName)
{
ChatTopicID = _ChatTopicID.ToCharArray();
ChatMessageID = _ChatMessageID.ToCharArray();
SendUserID = _SendUserID.ToCharArray();
ReceiveUserID = _ReceiveUserID.ToCharArray();
TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").ToCharArray();
MsgAction = 0;
MsgNum = 1;
MsgIndex = 0;
MsgLen = MsgStr.Length;
FileName = _FileName.ToCharArray();
}
}