如何将结构写入预先存在的字节数组?

时间:2017-11-21 22:23:38

标签: c# arrays serialization buffer

我已经看到很多关于如何通过创建一个新的字节数组将结构转换为字节数组的例子。

但我想避免这种情况。我有一个字节[1024]的消息缓冲区,我想从索引1开始将此结构写入此字节数组。索引0是标题,所以我跳过那个。

在没有创建新的字节数组的情况下,我找不到任何这样的例子。这甚至可能吗?

我目前如何将对象转换为字节数组:

    public static byte[] GetBytes<T>(T data)
    {
        int size = Marshal.SizeOf(data);
        byte[] arr = new byte[size];
        IntPtr ptr = Marshal.AllocHGlobal(size);

        Marshal.StructureToPtr(data, ptr, true);
        Marshal.Copy(ptr, arr, 0, size);
        Marshal.FreeHGlobal(ptr);

        return arr;
    }

这个问题是它在索引0的新数组上写入对象。我需要将它应用于索引1以上。其中索引0将以字节为单位指定struct的大小。

1 个答案:

答案 0 :(得分:2)

使用现有代码作为示例,为了将结构字节复制到位置1的现有数组,只需将现有数组和1的起始位置传递给Marshal.Copy

byte[] existingArray = new byte[1024];      // This is your existing 1024 size byte array

int size = Marshal.SizeOf(data);
IntPtr ptr = Marshal.AllocHGlobal(size);

Marshal.StructureToPtr(data, ptr, true);
Marshal.Copy(ptr, existingArray, 1, size);  // Pass your array and start at position 1
Marshal.FreeHGlobal(ptr);]