2 wen375827006 wen375827006 于 2016.09.09 16:30 提问

unity3d struct 与 byte[] 之间的转换?

我用C#作为unity的脚步,现在我写了一个结构体,想把它转为byte[]类型,方法如下
public static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer, true);
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, 0, size);
return bytes;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
但是这里出现一个问题,如果结构体里面没数组,能转成功,但是如果有数组,数组部分就会变为别的数据,这是什么原因呢?而且在反转的时候,数组部分数据会丢失

2个回答

caozhy
caozhy   Ds   Rxr 2016.09.09 22:59

http://blog.csdn.net/masterft/article/details/1699009
要给你的结构体指定内存布局

wen375827006
wen375827006   2016.09.12 09:38

[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
struct CMD_GP_LogonAccounts
{
public uint dwPlazaVersion;

[MarshalAs(UnmanagedType.ByValArray,SizeConst=33*2)]
public char[] szMachineID;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 33*2)]
    public char[] szPassword;               
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32*2)]
    public char[] szAccounts;       
};
    我指定了内存布局,如上面,不知哪里有问题呢?C#是没问题的,就在UNIty上有问题
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!