如何用VB翻译另一种语言的二进制文件?

时间:2015-01-14 12:16:00

标签: vb.net vba

我从VB应用程序中获取一个二进制文件,该文件包含大约1400条日期格式的时间戳记录,后跟19条长值。

我可以使用此功能读取VBA中的数据:

Dim myDate As Date
Dim myLong As Long
iFileNum = FreeFile
Open "C:\test.bin" For Binary Access Read As #iFileNum
Do While Not EOF(iFileNum)
  Get iFileNum, , myDate
  MsgBox(myDate)
  For i = 1 To 19
    Get iFileNum, , myLong
  Next i
Loop    

现在我想从java中读取文件中的日期时间戳(我已经能够读取Long值),但是我找不到有关如何解释Date类型的8个字节的任何信息。 / p>

例如,二进制形式的第一个时间戳是c5 b3 a2 11 80 7b e4 40。 VB输出为2014-11-05 0:03:06 AM。

为了澄清,我不是在寻找一个java实现,而是关于数据类型的二进制表示的信息'日期'来自VB。 (对此我没有能够找到比http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx更多的信息,这对我们来说没什么帮助)

1 个答案:

答案 0 :(得分:2)

正如@RBarryYoung在对该问题的评论中提到的那样,VBA在内部将日期/时间值存储为浮点Double值。整数部分是自1899-12-30以来的天数,小数部分是时间(例如,0.25 = 6 AM,0.5 = Noon,0.75 = 6 PM)。

在您给出的示例中,日期/时间(双精度)值以字节存储为c5 b3 a2 11 80 7b e4 40。 Windows一直是一个小端环境,因此通过反转字节的顺序,我们知道它对应于64位二进制值0x40e47b8011a2b3c5

this one这样的二进制到IEEE_Double转换器告诉我们,十进制Double值是4.19480021527777789742685854435E4,如果我们询问VBA我们得到的相应日期/时间值是什么< / p>

?CDate(41948.0021527777789742685854435)
2014-11-05 00:03:06