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

时间:2013-01-22 03:30:04

标签: c binary hex coordinates latitude-longitude

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

3 个答案:

答案 0 :(得分:4)

我曾使用摩托罗拉GPS模块一次,文档说这两个六角形表示int类型。

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

Motorola GPS Module

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

0x1442c8f3 

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

339921139 
十进制中的

。如果除以3600000毫秒 (1度= 60分钟= 60 * 60秒= 60 * 60 * 1000毫秒)你得到

94.4225386

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

答案 1 :(得分:2)

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

不要忘记单词可以具有两个字节序,即第一个可以是F3 C8 42 1414 42 C8 F3(字节颠倒)。

尝试两种方式,看看你是否有用。

我无法从this online floating point calculator here快速得到任何内容。

<小时/> 修改

根据Khanal的答案,这个Latitude/Longitude的链接表明这些数字确实是固定的,并解释了符号约定。

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

答案 2 :(得分:1)

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