【问题标题】:How to convert GPS Longitude and latitude from hex如何从十六进制转换 GPS 经度和纬度
【发布时间】:2013-06-28 00:56:44
【问题描述】:

我正在尝试从 GPS 跟踪设备转换 GPS 数据。该公司提供了协议手册,但不清楚。我能够从我从设备收到的数据包中解码的大部分数据。通信是通过 TCP/IP 进行的。我在解码经度和纬度的十六进制值时遇到问题。这是手册中的一个示例:

例子:22º32.7658'=(22X60+32.7658)X3000=40582974,然后转成十六进制数 40582974(十进制)= 26B3F3E(十六进制) 最后是0x02 0x6B 0x3F 0x3E。

我想知道如何从十六进制反转为经度和纬度。设备将发送 26B3F3E。我想知道得到22º32.7658的过程。

此协议适用于 GT06 和 Heacent 908。

【问题讨论】:

  • 难以置信是哪个白痴发明了这种表示法。十进制度数 * 1e6 提供一个 int 值,然后该值很容易编码和解码。只需除以 1e6 即可再次获得十进制度数。

标签: gps


【解决方案1】:
  1. 将所有四个值存储在无符号 32 位变量中。
    v1 = 0x02v2 = 0x6bv3 = 0x3fv4 = 0x3e

  2. 计算 (v4 << 48) | (v3 << 32) | (v2 << 16) | v1 这将产生一个变量,该变量包含十进制值 40582974。

  3. 将其转换为浮点数并除以 30,000.0(您的 3,000 是错误的),得到 1,352.765

  4. 切成整数并除以 60。这将得到 22。

  5. 将第 4 步中得到的数字乘以 60,然后从第 3 步中得到的数字中减去。这将得到 1352.765 - 22*60 或 32.765。

这是你的答案22,32.765

【讨论】:

  • 感谢您的回复。我将在我的代码中尝试它。我稍后会更新你。再次感谢您的快速响应
  • 大卫,我听从了你的建议,它奏效了。再次感谢您的帮助
  • vX 值是字节,而不是 16 位值,并且有一个错误的额外 |。代码应为(v4 << 24) | (v3 << 16) | (v2 << 8) | v1
  • @wallyk:它们是 32 位值。否则,当你转移它们时,就会发生不好的事情。
  • 如果这个解决方案不起作用,请查看这篇文章 - stackoverflow.com/questions/13543321/gps-tracker-received-data ...在花时间研究这种方法之后,幸运的是我找到了其他帖子,它对我有用..希望这可以帮助其他人跨度>
猜你喜欢
  • 2021-12-26
  • 1970-01-01
  • 2013-01-11
  • 2013-11-27
  • 2018-01-10
  • 1970-01-01
  • 2011-07-04
  • 2017-03-19
  • 2013-01-05
相关资源
最近更新 更多