110,534
社区成员
发帖
与我相关
我的任务
分享
/* 用户登录请求信息 */
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct LoginReq
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_USER_NAME_LENGTH, ArraySubType = UnmanagedType.I4)]
public char[] userName; //登录用户名
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_PASSWORD_LENGTH, ArraySubType = UnmanagedType.I4)]
public char[] passWord; //登录密码
}
/* 将结构体转换成字节数组的封装函数 */
public static byte[] StructToBytes(object structObj)
{
//得到结构体的大小
int size = Marshal.SizeOf(structObj);
byte[] bytes = new byte[size];
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(structObj, structPtr, false);
MyMsg.LoginReq loginReq = (MyMsg.LoginReq)Marshal.PtrToStructure(structPtr, typeof(MyMsg.LoginReq));
//从内存空间拷到byte数组
Marshal.Copy(structPtr, bytes, 0, size);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回byte数组
return bytes;
}