元组将结构复制到字节数组,每个字节都为 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。