通过使用Buffer.BlockCopy()将原始类型转换为字节很容易。如何将struct数组转换为c#中的字节数组?
但是,如果我有一个DateTime数组,我应该使用哪个函数将DateTime []转换为byte []?
如果我有一个常量大小的结构(这意味着我可以使用Marshal将结构转换为byte []),我应该使用哪种方式将T [](结构数组)转换为byte []?
通过使用Buffer.BlockCopy()将原始类型转换为字节很容易。如何将struct数组转换为c#中的字节数组?
但是,如果我有一个DateTime数组,我应该使用哪个函数将DateTime []转换为byte []?
如果我有一个常量大小的结构(这意味着我可以使用Marshal将结构转换为byte []),我应该使用哪种方式将T [](结构数组)转换为byte []?
如果底层内存中表示的副本后,再一种方法是只访问数据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[]
的内容以及您打算如何处理它。
我想发送很多DateTime []到网络,所以我需要一个快速的方法来做到这一点。 –
@NorSD so ...你的网络协议期望什么?表示刻度的int-32或int-64会不够吗? –
我以前使用的方式是存储[](现在,我们可以使用Buffer.BlockCopy到byte []),它是DateTime.Ticks,并且效果很好。我不知道天气在32/64系统中DateTime的大小是不同的(我认为它总是8个字节)。现在有大量的DateTime [],所以我想找到一种方法来轻松快速地转换它们。在将它们转换为byte []后,我将通过套接字发送到网络。接收器可以是本机C++客户端。 –
你想要原始的内存数据吗?或者你想要一些特定的布局/格式? –
http://stackoverflow.com/questions/2274035/how-to-convert-a-byte-into-datetime-in-c,http://stackoverflow.com/questions/7362174/tightest-byte-representation-of -yyyymmddhhmmss,[DateTime.ToBinary](http://msdn.microsoft.com/en-us/library/system.datetime.tobinary(v = vs.110).aspx)。 – CodeCaster
这里不能使用'Marshal',因为'Marshal.SizeOf(typeof(DateTime))'不起作用;再次:你想要的输出是什么? –