Borland TDateTime转换为.NET DateTime

时间:2015-09-04 21:26:56

标签: c# c++ .net type-conversion borland-c++

我有类似

的数字转换问题

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

这些值相隔几秒钟,但明显不同。

如果有人对如何转换这个有任何建议我会很感激!

1 个答案:

答案 0 :(得分:0)

BitConverterHow 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的更好选择。