Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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_Struct_Marshalling - Fatal编程技术网

如何在c#中将结构数组转换为字节数组?

如何在c#中将结构数组转换为字节数组?,c#,arrays,struct,marshalling,C#,Arrays,Struct,Marshalling,使用Buffer.BlockCopy()可以轻松地将基元类型转换为字节 但是,如果我有一个DateTime数组,我应该使用哪个函数将DateTime[]转换为byte[] 如果我的struct大小不变(这意味着我可以使用Marshal将struct转换为byte[]),我应该使用哪种方式将T[](struct array)转换为byte[]?如果您正在寻找底层内存表示的副本,那么一种方法就是只访问数据不安全的-类似于: // invent some data DateTime[] origina

使用Buffer.BlockCopy()可以轻松地将基元类型转换为字节

但是,如果我有一个DateTime数组,我应该使用哪个函数将DateTime[]转换为byte[]


如果我的struct大小不变(这意味着我可以使用Marshal将struct转换为byte[]),我应该使用哪种方式将T[](struct array)转换为byte[]?

如果您正在寻找底层内存表示的副本,那么一种方法就是只访问数据
不安全的
-类似于:

// invent some data
DateTime[] original = new DateTime[10];
for (int i = 0; i < original.Length; i++)
    original[i] = new DateTime(2014, 1, i + 1);

byte[] blob = new byte[original.Length * sizeof(DateTime)];

fixed (DateTime* src = original)
fixed (byte* dest = blob)
{
    DateTime* typedDest = (DateTime*)dest;
    for(int i = 0; i < original.Length; i++)
    {
        typedDest[i] = src[i];
    }
} 
//发明一些数据
DateTime[]原件=新日期时间[10];
for(int i=0;i

但是,这在很大程度上取决于您对
字节[]
的内容的期望,以及您打算如何处理它。

您想要内存中的原始数据吗?或者您是否需要某些特定的布局/格式?,。您不能在此处使用
Marshal
,因为
Marshal.SizeOf(typeof(DateTime))
不起作用;再说一遍:您希望这里的预期输出是什么?是的,您是对的。我获取DateTime大小的方法是链接:我想将DateTime[]发送到网络,所以我应该首先将其转换为字节[]。我想找到一种像Buffer.BlockCopy这样的方法,简单而快速地将DateTime[]转换为字节[]。我想将大量DateTime[]发送到网络,所以我需要一种快速的方法来实现。@NorSD所以。。。你的网络协议期望什么?表示ticks的int-32或int-64不够吗?我以前使用的方法是将Buffer.BlockCopy存储为long[](现在,我们可以将Buffer.BlockCopy存储为byte[]),这就是DateTime.ticks,它工作得很好。我不知道DateTime的大小在32/64系统中是否不同(我认为它总是8字节)。现在有大量的DateTime[],所以我想找到一种方法来轻松快速地转换它们。将它们转换为字节[]后,我将通过套接字发送到网络。接收器可以是本地C++客户端。