在做c++ 与 c#通信的模块  public static byte[] StructToBytes(object obj)
    {
        //得到结构体的大小
        int size = Marshal.SizeOf(obj);
        //创建byte数组
        byte[] bytes = new byte[size];
        //分配结构体大小的内存空间
        IntPtr structPtr = Marshal.AllocHGlobal(size);
        //将结构体拷到分配好的内存空间
        Marshal.StructureToPtr(obj, structPtr, false);
        //从内存空间拷到byte数组
        Marshal.Copy(structPtr, bytes, 0, size);
        //释放内存空间
        Marshal.FreeHGlobal(structPtr);
        //返回byte数组
        return bytes;
    }public class S_GM_LOOKINFO_BYUSERNAME : MessageHead
{     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public char[] m_username;     public S_GM_LOOKINFO_BYUSERNAME(string user)
        
    {
        this.m_username = user.PadRight(32, '\0').ToCharArray();
        this.len = GetMessageLen();
        this.cmd =(UInt32) MessageID.GM_LOOKROLEINFO_BYUSERNAME;
    }    public UInt32 GetMessageLen()
     { 
        MessageHead o = new MessageHead();
       return (UInt32)( Marshal.SizeOf(this) - Marshal.SizeOf(o));
     }
}
当m_username为中文时 运行出错,英文正确 求帮忙