我用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);
}
}
但是这里出现一个问题,如果结构体里面没数组,能转成功,但是如果有数组,数组部分就会变为别的数据,这是什么原因呢?而且在反转的时候,数组部分数据会丢失
http://blog.csdn.net/masterft/article/details/1699009
要给你的结构体指定内存布局
[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上有问题
要是你这个能成功了,就可以直接byt[]转prefab了