使用Buffer.BlockCopy()将原始类型转换为字节很容易。
但是如果我有一个DateTime数组,我应该使用哪个函数将DateTime []转换为byte []?
如果我有一个常量的struct(这意味着我可以使用Marshal将struct转换为byte []),我应该用哪种方式将T [](struct array)转换为byte []?
答案 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[]
内容的期望,以及您打算用它做什么。