0

システムに GPS デバイスを設定しようとしています。GPS デバイスは、データ パケットを次の形式で IP に送信します。

$$�W��¬ÿÿÿÿ™U042903.000,A,2839.6408,N,07717.0905,E,0.00,,230111,,,A*7C|1.2|203|0000÷ 

緯度、経度、その他の情報を抽出することはできますが、文字列からトラッカー ID を抽出することはできません。

マニュアルによると、ID は 16 進形式です。パケットの形式は次のとおりです。

$$<L(2 bytes)><ID(7 bytes)><command (2 bytes)><data><checksum (2 bytes)>\r\n

どうすればいいのかわかりません。これを16進数に変換しようとしましたが、うまくいきませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

0

詳細についてはどうですか?どのGPS?どのインターフェース(USB、シリアル)?あなたはどの言語で働いていますか?

あなたのデータは確かに奇妙に見えます。GPSデータに関する私の経験では、通常は英数字と区切り文字ですが、文字列が破損しているか、英数字以外の値が含まれているようです。


提供した追加情報に基づいて更新します。

あなたが提供したGPRSマニュアルはフォーマットを説明しています:

$$ - 2 bytes - in ASCII code (Hex code: 0x24) 
L - 2 bytes - in hex code
ID  7 bytes - in the format of hex code.
    For example, if ID is 13612345678, then it will be shown as follows: 
    0x13, 0x61, 0x23, 0x45, 0x67, 0x8f, 0xff.  
command - 2 bytes - hex code

私が正しく理解していれば、$$の後、データフィールドの前のぎこちない文字は印刷可能なASCII文字ではありません。これらは実際の数値であり、一度に1バイトずつ提供されます。各バイトを16進形式の文字列に変換して表示すると、私が何を意味するのかがわかるはずです。

PHPのことはよく覚えていませんが、次のような方法でIDを16進形式の文字列に形成できると思います。

$s = GetYourGPRSStringFromWherever()
$sID = sprintf("0x%02x%02x%02x%02x%02x%02x%02x", $s[4],  $s[5],  $s[6],  
               $s[7],  $s[8],  $s[9],  $s[10]);

(また、ドキュメントの例に従って、0xFF値を削除または無視します)

于 2011-02-05T07:21:41.570 に答える