我有一个方法,它接受一个类型并将其转换为字节数组。但由于某种原因,字节数组结果总是在每个索引中以0结尾。
我不知道为什么会发生这种情况,我传递的是我自己的结构,它确实设置了值,我正在检查它,所以我不应该为每个索引得到0。
这是我转换为字节数组的方法:
public static bool TryGetBytes<T>(T obj, ref byte[] arr)
{
int size = Marshal.SizeOf(obj);
if (size > arr.Length)
{
Debug.Log("Size error!" + size + " : "+arr.Length);
return false;
}
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj, ptr, true);
Marshal.Copy(ptr, arr, size, 0);
Marshal.FreeHGlobal(ptr);
return true;
}
这里有什么我可能做错的吗?我需要ref
吗?我试过没有ref
,没有发生任何差异。所以我有点困惑如何让它发挥作用。
答案 0 :(得分:2)
使用Marshal.Copy时出错: https://msdn.microsoft.com/en-us/library/ms146631(v=vs.110).aspx
public static void Copy(
IntPtr source,
byte[] destination,
int startIndex,
int length
)
您的起始索引和长度已经反转。我估计它不会因为长度为0而抛出异常。