我以DAF“传输”格式下载了一些数据,这完全是NASA的 在这里没有解释:
如何阅读此文件。以下是我想要理解的前几行:
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程序的流行格式, 但谷歌一点都不帮助(维基百科没有条目 其一)。
答案 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 本身,由人类。它是一种传输格式,旨在将任何可执行代码转换回可用的二进制文件。
你没有解释为什么要这样做。因此,除非您正在编写文件解析器(已经至少以两种语言完成),否则我不确定能够读取原始值的好处是什么。
严格地说,您的问题的答案是您使用软件(请参阅上面的链接)来阅读它。