如何在c#中将Struct Array转换为Byte数组?

时间:2014-07-03 12:37:01

标签: c# arrays struct marshalling

使用Buffer.BlockCopy()将原始类型转换为字节很容易。

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

如果我有一个常量的struct(这意味着我可以使用Marshal将struct转换为byte []),我应该用哪种方式将T [](struct array)转换为byte []?

1 个答案:

答案 0 :(得分:4)

如果您正在阅读基础内存表示的副本,那么一种方法是只访问数据unsafe - 类似于:

// 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];
    }
} 

但是,非常取决于您对byte[]内容的期望,以及您打算用它做什么。