我有这个结构体定义:
public struct ChangedByte
{
public byte R;
public byte G;
public byte B;
public int x;
public int y;
}
我创建了一个:
List<ChangedByte> testme = new List<ChangedByte>();
(并添加项目到其中)
我将其转换为数组:
ChangedByte[] alpha = testme.ToArray();
我找到了一个与SO上类似问题相关的函数:
byte[] StructureToByteArray(object obj)
{
int len = Marshal.SizeOf(obj);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(obj, ptr, true);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
我会这样称呼它:
byte[] test = StructureToByteArray(alpha);
我得到了以下错误信息:
“Type 'new_encoder.Form1+ChangedByte[]' 无法作为非托管结构进行封送;无法计算有意义的大小或偏移量。”
我想把一个对象列表转换成字节数组(可能避免序列化,因为它会增加数组的大小)。这可行吗?
另外:
我已经尝试将结构体修改为以下内容:
public struct ChangedByte
{
[MarshalAs(UnmanagedType.LPWStr)]
public byte R;
[MarshalAs(UnmanagedType.LPWStr)]
public byte G;
[MarshalAs(UnmanagedType.LPWStr)]
public byte B;
[MarshalAs(UnmanagedType.LPWStr)]
public int x;
[MarshalAs(UnmanagedType.LPWStr)]
public int y;
}
但是仍然出现相同的错误。