元组将结构复制到字节数组,每个字节都为 0
Marshal copying struct to byte array comes out as 0 for each byte
我有一个方法可以接受类型并将其转换为字节数组。但由于某种原因,字节数组结果在每个索引中总是以 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
的情况下尝试过,但没有发生任何变化。所以我有点困惑如何让它工作。
您在使用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。
我有一个方法可以接受类型并将其转换为字节数组。但由于某种原因,字节数组结果在每个索引中总是以 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
的情况下尝试过,但没有发生任何变化。所以我有点困惑如何让它工作。
您在使用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。