C# 如何将固定长度的数据类数组封送至字节数组并从中封送?
我正在编写一个自定义二进制序列化程序,我想将固定长度的数据类数组转换为字节[],反之亦然。下面是一个示例数据类:C# 如何将固定长度的数据类数组封送至字节数组并从中封送?,c#,arrays,C#,Arrays,我正在编写一个自定义二进制序列化程序,我想将固定长度的数据类数组转换为字节[],反之亦然。下面是一个示例数据类: [Serializable, StructLayout(LayoutKind.Sequential)] public class DataPoint { float A{ get; set; } float B{ get; set; } float C{ get; set; } } 下面是我在序列化方面的最佳尝试,但没有成功: // 'value' i
[Serializable, StructLayout(LayoutKind.Sequential)]
public class DataPoint
{
float A{ get; set; }
float B{ get; set; }
float C{ get; set; }
}
下面是我在序列化方面的最佳尝试,但没有成功:
// 'value' is a pointer to DataPoint[]
public byte[] SerializeArray(object value)
{
Type type = value.GetType();
Type etype = type.GetElementType();
int esize = Marshal.SizeOf(etype);
// I was hoping this would return the array length, but it throws
int size = Marshal.SizeOf(value);
IntPtr ptr = Marshal.AllocHGlobal(esize*size);
Marshal.StructureToPtr(value, ptr, false);
byte[] bytes = new byte[esize * size];
Marshal.Copy(ptr, bytes, 0, esize * size);
Marshal.FreeHGlobal(ptr);
}
还有更好的主意吗
谢谢
Aaron看,这篇文章似乎是关于如何封送一个固定长度的数据结构的——尽管我可能遗漏了一些东西。我想在不迭代的情况下封送一个结构数组(这非常慢)。这在C++中是微不足道的。您只需分配内存,然后通过一个memcpy调用复制整个内容。C#的等价物是什么?啊,我误解了。您是否尝试过将数据点设置为结构而不是类?我相信一个对象数组(通过“类”声明)作为引用数组被放置在内存中,而一组值(通过“结构”声明)将实际数据按C++顺序排列。这似乎是一篇关于如何封送单个固定长度数据结构的文章,尽管我可能遗漏了一些东西。我想在不迭代的情况下封送一个结构数组(这非常慢)。这在C++中是微不足道的。您只需分配内存,然后通过一个memcpy调用复制整个内容。C#的等价物是什么?啊,我误解了。您是否尝试过将数据点设置为结构而不是类?我相信一个对象数组(通过“类”声明)作为引用数组被放置在内存中,而一组值(通过“结构”声明)将实际数据按C++顺序排列。看见