2013-06-28 7 views
5

私はGPS追跡デバイスからGPSデータを変換しようとしています。同社はプロトコルマニュアルを提出したが、明確ではない。ほとんどのデータは、デバイスから受信したパケットからデコードできました。通信はTCP/IPを介して行われます。私は経度と緯度の16進値を解読する問題を抱えています。ここでマニュアルの例である:GPSの緯度と経度を六角から変換する方法

例:22º32.7658' =(22X60 + 32.7658)X3000 = 40582974、その値が最後進数 40582974(10進数)= 26B3F3E(16進数) に変換0x02 0x6B 0x3F 0x3E。

16進数から緯度および経度に戻す方法を知りたいと思います。デバイスは26B3F3Eを送信します。私は22º32.7658を取得するプロセスを知りたい。

このプロトコルはGT06とHeacent 908

+0

[六角データからのバックラチチュードの変換] GREENTEL(http://stackoverflow.com/questions/7151896/convert-back-latitude-from-hex-data-greentel) – wallyk

+0

愚か者がその表現を発明しました。 10進数* 1e6はint値を出力します。この値はエンコードとデコードが容易です。小数点以下の桁数を得るには1e6で割ります。 – AlexWien

答えて

2
  1. ストア符号なしの32ビット変数で4つの値すべてに適用されます。
    v1 = 0x02,v2 = 0x6b,v3 = 0x3f,v4 = 0x3e

  2. 計算(v4 << 48) | (v3 << 32) | (v2 << 16) | v1これは、値40582974の10進数を保持する変数を生成します。 (あなたの3000がエラーだった)、これは60これで整数除算するチョップはあなたに22

  3. を与える

  4. あなたに1,352.765を与えるフロートにこれを変換し、30,000.0で割り

  5. 手順4で取得した数値に60を掛け、手順3で取得した数値から減算します。これにより、1352.765 - 22*60または32.765が得られます。

回答があります。2232.765です。

+0

お返事ありがとうございます。私は自分のコードで試してみます。私は後であなたを更新します。再び迅速な応答のためにありがとう – Adeed

+2

デビッド、私はあなたの提案に従って、それは動作します。もう一度あなたの助けをありがとう – Adeed

+0

'vX'の値は16ビット値ではなく、バイトで、誤った' | 'がありました。コードは '(v4 << 24)|でなければなりません。 (v3 << 16)| (v2 << 8)| v1'。 – wallyk

関連する問題