我已经看到很多关于如何通过创建一个新的字节数组将结构转换为字节数组的例子。
但我想避免这种情况。我有一个字节[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的大小。
答案 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);]