C# 将结构复制到字节数组的封送处理对于每个字节显示为0

C# 将结构复制到字节数组的封送处理对于每个字节显示为0,c#,arrays,struct,data-conversion,C#,Arrays,Struct,Data Conversion,我有一个方法,它接受一个类型并将其转换为字节数组。但由于某些原因,字节数组结果在每个索引中总是以0结尾 我不知道为什么会发生这种情况,我正在传递我自己的结构,它确实设置了值,我正在检查它,所以我不应该每个索引都得到0 这是我转换为字节数组的方法: public static bool TryGetBytes<T>(T obj, ref byte[] arr) { int size = Marshal.SizeOf(obj); if (s

我有一个方法,它接受一个类型并将其转换为字节数组。但由于某些原因,字节数组结果在每个索引中总是以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;
    }
publicstaticbooltrygetbytes(T obj,refbyte[]arr)
{
int size=Marshal.SizeOf(obj);
如果(尺寸>阵列长度)
{
Log(“大小错误!”+Size+:“+arr.Length”);
返回false;
}
IntPtr ptr=Marshal.AllocHGlobal(大小);
Marshal.StructureToPtr(obj、ptr、true);
封送处理副本(ptr、arr、大小,0);
弗里赫全球元帅(ptr);
返回true;
}

这里有什么我可能做错的吗?我需要
ref
吗?我在没有
ref
的情况下进行了尝试,但没有出现任何差异。所以我有点困惑如何让它工作。

您在使用封送处理时的错误。复制:


开始索引和长度颠倒了。我猜它不会抛出异常,因为长度为0

您肯定需要'ref',否则您在函数中处理arr的操作将处理本地副本,并且在函数完成后不会导致任何更改。好的,感谢您澄清这一部分:)我想可能是这样的。它不应该是-Marshal.copy(ptr,arr,0,size)…?@MineR噢,该死,真让人难堪!这就解决了问题:DYup解决了它,愚蠢的错误!我想我需要休息一下喝咖啡!谢谢
 public static void Copy(
    IntPtr source,
     byte[] destination,
     int startIndex,
     int length
 )