对于每个字节,元素复制结构到字节数组的结果为0

时间:2017-10-06 06:02:37

标签: c# arrays struct data-conversion

我有一个方法,它接受一个类型并将其转换为字节数组。但由于某种原因,字节数组结果总是在每个索引中以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,没有发生任何差异。所以我有点困惑如何让它发挥作用。

1 个答案:

答案 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而抛出异常。