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

How to write a struct to a pre existing byte array?

我看过很多关于如何通过创建新字节数组将结构转换为字节数组的示例。

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

我找不到任何在不创建新字节数组的情况下完成此操作的示例。这可能吗?

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

    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 处的新数组上写入 object。我需要将它应用于索引 1 之后。其中索引 0 将以字节为单位指定结构的大小。

以您现有的代码为例,为了将您的结构字节复制到位置 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);]