Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将固定长度的数据类数组封送至字节数组并从中封送?_C#_Arrays - Fatal编程技术网

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++顺序排列。看见