从数据包GPS中提取ID

时间:2011-02-05 06:23:55

标签: gps hex packet-capture

我正在尝试为我的系统配置GPS设备。 GPS设备以下列格式将数据包发送到我的IP:

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

我能够提取纬度,经度和其他信息,但我无法从字符串中提取跟踪器ID。

根据手册,ID为十六进制格式。数据包的格式为

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

我不知道该如何处理它,我已经尝试将其转换为十六进制..但它没有用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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字符。它们是实际的数值,一次提供一个字节。如果您将每个字节转换为十六进制格式的字符串并显示它,您应该看到我的意思。

我不记得我的PHP,但我认为ID可以通过以下方式形成十六进制格式的字符串:

$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值)