将未知的hex数字转换为经度和纬度

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设备获得的hex数据,如何转换为可读坐标? 我没有任何手册文件。请帮助。谢谢

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

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

我曾经使用摩托罗拉GPS模块一次,文档说这两个hexes代表int类型。

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

摩托罗拉GPS模块

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

 0x1442c8f3 

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

 339921139 

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

 94.4225386 

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

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

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

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

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


编辑:

在Khanal的答案的基础上,这个与纬度/经度的链接表明这些数字确实是固定点,并解释了符号约定。

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