我有类似
的数字转换问题How to convert a double value to a DateTime in c#?
我的时间信息从UDP数据流中拉出8字节长。这是从Borland C ++中的TDateTime对象编码为double,它与COM datetime兼容。
我在visual studio C#中解码这个数据流,并且对DateTime对象的任何转换都会出现奇怪的日期。
我认为DateTime.FromBinary()可能会解决问题,但这也无法正确解码时间/日期。
now()的十六进制值在两个系统之间有很大差异:
Borland: 0x 40E4A17C20782C71
C# : 0x 8E6EA19D6CB5D288
这些值相隔几秒钟,但明显不同。
如果有人对如何转换这个有任何建议我会很感激!
答案 0 :(得分:0)
BitConverter
(How to convert a byte array to double array in C#?)与(How to convert a double value to a DateTime in c#?)中的DateTime.FromOADate
相结合,就是您所追求的目标:
var date = DateTime.FromOADate(BitConverter.ToDouble(
(new byte[]{0x40,0xE4,0xA1,0x7C,0x20,0x78,0x2C,0x71}).Reverse().ToArray(),
0));
注 - 根据您读取字节的方式,您可能需要使用非0偏移量(如果您读取到字节数组)并且可能不需要Reverse
(可能取决于系统之间的字节顺序)。另外,根据您读取数据的方式,BinaryReader.ReadDouble
之类的内容可能是从传入二进制数据中获取double
的更好选择。