将未知的十六进制数字转换为经度和纬度

4
F3 c8 42 14 - latitude //05.13637° should be nearby this coordinate
5d a4 40 b2  - longitude //100.47629° should be nearby this coordinate

这是我从GPS设备中获取到的十六进制数据,如何将其转换为可读坐标?我没有任何手册文件。请帮忙,谢谢。

    22 00 08 00 c3 80 00 20 00 dc f3 c8 42 14 5d a4 40 b2 74 5d 34 4e 52 30 39
47 30 35 31 36 34 00 00 00

这是我收到的完整字节,但工程师告诉我 F3 c8 42 14 是纬度,5d a4 40 b2 是经度。


我已经编辑了标题并添加了一些其他标签,以吸引更广泛的受众,因为拥有更多的关注度会更有利。特别是C标签应该能够吸引许多硬核专家,其中一个可能会有获胜的想法。 - Assad Ebrahim
1
我会因此失眠。@Anthor,你能给我们提供GPS模块的型号或其他信息吗? - Khanal
这个类似问题的答案似乎使用了不仅仅是位置的十六进制编码...但我不明白他是如何得出这些常量的。 - Assad Ebrahim
@Khanal:这是一款中国GPS设备,因此没有任何型号。 - user1972227
3个回答

4

我曾与摩托罗拉的GPS模块合作过,文档中说这两个十六进制数表示int类型。

在您的情况下,您可能也需要查看文档。如果您知道型号,可以直接谷歌搜索。 这是我所使用的摩托罗拉GPS的文档链接。

摩托罗拉GPS模块

我还为您做了一些计算。如果您的纬度确实是

0x1442c8f3 

(字节序在这里确实很重要)。整数的等效值为
339921139 

在十进制系统中,如果你将其除以3600000毫秒角(其中1度= 60分= 60 * 60秒= 60 * 60 * 1000毫秒),你会得到

94.4225386

deg(度数),接近于您的期望。没有足够的数据来验证,但我相信大多数GPS模块都返回纬度和经度的毫弧秒。)


1
不错的观察!(这些可能是固定点)。然而,你的中间结果似乎不正确?根据我的计算,0x1442c8f3是339921139(十进制)。此外,3600000毫角秒是60601000。 - Assad Ebrahim
纬度的方法似乎不能用于经度。假设采用小端表示,我们得到0xb240a45d。如果这是一个有符号长整型,则它应该是负数。但因为位置是E,所以它应该是正数。所以现在假设这实际上是一个无符号长整型,我们得到整数值为2990580829。再次除以3,600,000得到830.71,比预期稍微远一些。 - Assad Ebrahim
抱歉,我需要进行编辑。你是对的,339921139进制10是我得到的结果。我还在适应这个双显示器设备,复制并粘贴了错误的数字。我现在会修正它。我确实通过60601000得到了3600000,但有点过于兴奋,搞砸了,因为我得到的结果非常接近预期结果。 :) - Khanal
没问题--我对定点观察也感到非常兴奋。 但是看看第二条评论。 不确定同样的方法适用于经度... - Assad Ebrahim
94.4225386离5.13637度有多近?另外,你不能拥有大于90度的纬度。 - Jim Merkel
如果它是无符号的,那么南极或北极中必须有一个为0。如果南极为0,则94.4335386 S为4.4335386 N。同样,这些都是猜测,除非我们有文档记录。这更像是逆向工程。 - Khanal

2
假设十六进制代码表示未加密的32位浮点数(可能不是),你可以尝试将它们读入C程序并使用 printf("%f")打印出来。请记住,单词可以具有两种字节序,即第一个可以是 F3 C8 42 14 或 14 42 C8 F3 (反转字节)。用两种方法尝试并查看是否有用的输出。我无法从这个在线浮点计算器中快速得到任何结果。 编辑:基于Khanal的答案,此链接Latitude/Longitude表明数字确实是固定点,并解释了符号约定。对于计算而言,也许更有用的是HexIt,它允许从各种整数和浮点数据类型中进行选择,并在小端和大端表示之间快速切换。

1
我认为这些值是32位浮点数。然而,你展示的流中的字节略有偏移。首先考虑经度:100.47629在32位浮点数中是42C8F3DC,这些是你的流中第10到第13个字节(最不重要的字节在前)。对于纬度,5.13637在32位浮点数中是40A45D24,这些是你的流中第14到第17个字节,但在字节流中是40A45D14,所以它在最不重要的小数位上有一点偏差(同样,最不重要的字节在前)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接