如何读取DAF(双精度数组文件)“传输”文件?

时间:2014-02-02 13:37:38

标签: encoding

我以DAF“传输”格式下载了一些数据,这完全是NASA的 在这里没有解释:

http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/daf.html#Conversion%20and%20Transfer%20of%20DAF%27s

如何阅读此文件。以下是我想要理解的前几行:

 
DAFETF NAIF DAF ENCODED TRANSFER FILE 
'DAF/SPK ' 
'2' 
'6' 
'NIO2SPK                                                     ' 
BEGIN_ARRAY 1 3895604 
'URA111                                  ' 
'-BC186A96D0E76^8' 
'BC0DDF032F041^8' 
'2BD' 
'7' 
'1' 
'3' 
1024 
'-BC18166^8' 
'FD2^4' 
'-DA4A19AC2BCD18^4' 
'-4D5E7E1A67739^4' 
'1D46248537C30E^5' 
'EBA587DFA5E3B^3' 
'-26885CE73CB0D^4' 
'-BF0DC6EDB5B2C8^2' 
'129C1CFEABE48^3' 
'5594FC676368^1' 
'-472EBF2225A^1' 
'-2198AE1963D^0' 
'79CC4CA0C^-1' 
'FDD9792D82^-2' 
'2001D81A^-2' 
'333BCEE2BDD724^4' 
'-D78AA10831D9C8^4' 
'-6D712677574DF8^4' 
'283A14783CDC^4' 
'90AC22194ABF6^3' 
'-1DEF6219F664FE^3' 
'-47318F604096^2' 
'9B805F405B1C^1' 
'1275B947E2AC^1' 
'-16A664664D^0' 
'-2F614B9F5^-1' 
'-B7C3E41D^-3' 
'2F3D71F8^-3' 

根据NASA的说法,这是Fortran程序的流行格式, 但谷歌一点都不帮助(维基百科没有条目 其一)。

2 个答案:

答案 0 :(得分:2)

好吧,我想我终于弄清楚了至少其中的一部分。对于 参考,原始文件(高达162M)是 ura111.bsp文件:

http://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/

并使用toxfr程序转换为ura111.xsp:

http://naif.jpl.nasa.gov/pub/naif/utilities/SunIntel_32bit/

小文件:

http://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/ura111.cmt

http://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/ura111.inp

详细说明主文件。

像“-BC18166 ^ 8”这样的东西真的是双精度数字,写的 采用改进的十六进制IEEE-754格式。维基百科有点解释 这种格式在这里:

http://en.wikipedia.org/wiki/IEEE-754

并且有这样的IEEE-754到十进制转换器:

http://www.h-schmidt.net/FloatConverter/(以及其他许多人)

但是,这些并不能解释/转换NASA使用的确切格式 是我混淆的一个原因。

供参考“-BC18166 ^ 8”转换如下:

  • “BC18166”的十进制值是197230950

  • 我们现在重复除以16,直到结果小于1(in 换句话说,我们除以16 ^(“BC18166”的长度)),屈服 0.734742544591427

  • '^ 8'表示我们乘以16 ** 8得到3155695200

  • 领先的“ - ”只是意味着我们添加一个减号来获得-3155695200

当然,我们可以结合第2步和第3步,然后成倍增加 197230950 by 16.

@klugerama,回答你的问题,是的,我正在尝试写一个文件 解析器,这次是在Perl中,作为一个准确的程序的一部分 识别太阳系中各种物体的位置。

我已经解析了与行星有关的NASA文件(以及地球的 自己的月亮):

ftp://ssd.jpl.nasa.gov/pub/eph/planets/ascii/

但这些是一种非常不同且更容易解析的格式。

答案 1 :(得分:1)

This document(在ucla.edu上托管)有完整的文件格式说明。

另外,请查看Github上的this python project。它似乎提供了您正在寻找的DAFTB功能。

修改对于记录( cough ),看起来这种格式似乎不是 read 本身,由人类。它是一种传输格式,旨在将任何可执行代码转换回可用的二进制文件。

你没有解释为什么要这样做。因此,除非您正在编写文件解析器(已经至少以两种语言完成),否则我不确定能够读取原始值的好处是什么。

严格地说,您的问题的答案是您使用软件(请参阅上面的链接)来阅读它。