3
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 是经度

4

3 回答 3

4

我曾经使用过摩托罗拉 GPS 模块,文档说这两个十六进制表示 int 类型。

在您的情况下,您可能还想查看文档。如果你知道型号,你可以谷歌它。这是我使用的摩托罗拉 GPS 的文档链接。

摩托罗拉 GPS 模块

我也冒昧地为你做了一些计算。如果你的纬度确实是

0x1442c8f3 

(字节序在这里确实有所作为)。整数等价物是

339921139 

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

94.4225386

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

于 2013-01-22T06:24:44.920 回答
2

假设十六进制代码表示未加密的 32 位浮点数(它们可能不这样做),您可以尝试将它们读入 C 程序并使用printf("%f").

不要忘记单词可以同时具有字节顺序,即第一个可以是F3 C8 42 1414 42 C8 F3(字节反转)。

尝试这两种方式,看看你是否得到任何有用的东西。

我无法从这里的这个在线浮点计算器快速得到任何东西。


编辑:

基于 Khanal 的回答,这个指向纬度/经度的链接表明这些数字确实是固定点并解释了符号约定。

也许对计算更有用的是HexIt,它允许从各种 C 数据类型中进行选择,包括整数和浮点数,以及在小端和大端表示之间来回切换。

于 2013-01-22T05:36:26.603 回答
1

我认为这些值是 32 位浮点数。但是,您显示的流中的字节略有偏移。首先取经度:32 位浮点中的 100.47629 是 42C8F3DC 这些是流中的字节 10 到 13(最低有效字节在前)。对于 32 位浮点中的纬度 5.13637 是 40A45D24,这些是字节 14 到 17,但它在字节流中是 40A45D14,所以它在最低有效十进制数字中稍微偏离了一点(同样,它是最低有效字节)。

于 2013-01-24T05:54:50.423 回答