我正在终点处进行跟踪项目。我卡住了。我有一些ASCII数据,我想转换该数据,并希望获得车辆状态。 我从GPS追踪设备获得的数据。
* HQ,1700082911,V1,084938,A,2304.5102,N,07231.5528,E,003.7,179.11,270917,FFFFFBFF#
现在我从这个脚本中得到了我需要的一切。但根据设备文档说明,我无法找到车辆状态。上面的数据中有一个ASCII代码字符串 FFFFFBFF ,对于下面我提到的文件说。
vehicle_status(FFFFFBFF):车辆状态,4个字节,表示车辆运行状态,附件状态或报警状态等.ASCII符号表示状态,以下是每个位的定义,Bit = 0意味着活跃。
根据这条指示,他们给了我一张桌子。我不能在这里画一张桌子,所以我附上了一个屏幕截图。
希望所以你理解我的问题我有一个字符串FFFFFBFF#这是我要转换它的ASCII。
答案 0 :(得分:0)
此代码提取位并将这些位与您给出的表进行匹配。我只填写了一些信息作为例子。
<?php
$hex = 'FFFFFBFF';
$stati = [
// byte nr
0 => [
// byte 1
0 => 'Tempearature alarm',
1 => 'Password error alarm',
2 => 'GPRS error alarm',
3 => 'Turn off engine',
4 => 'Power down alarm',
5 => 'High triggered sensor 1 is high',
6 => 'High triggered sensor 2 is high',
7 => 'Low triggered sensor 1 is GND',
],
1 => [
// byte 2
0 => 'GPS fault alarm',
1 => 'Battery low alarm',
2 => 'nop',
3 => 'Use battery backup',
4 => 'Battery removed',
5 => 'No GPS antenna',
6 => 'GPS antenna shot',
7 => 'Low triggered sensor 2 is GND',
],
2 => [
// byte 3
0 => 'Door open',
1 => 'Arm',
2 => 'ACC off',
3 => 'nop',
4 => 'nop',
5 => 'Engine start',
6 => 'nop',
7 => 'Over speed',
],
3 => [
// byte 4
0 => 'Shock alarm',
1 => 'SOS alarm',
2 => 'Over alarm',
3 => 'Start engine alarm',
4 => 'Enter Geo-fence alarm',
5 => 'No GPS antenna',
6 => 'GPS antenna shot',
7 => 'Break Geo-fence alarm',
],
];
foreach (str_split($hex, 2) as $byte_nr => $byte) {
$bits = str_pad(base_convert($byte, 16, 2), 8, '0', STR_PAD_LEFT);
foreach (str_split($bits) as $bit_nr => $bit) {
if ($bit == 0) {
echo $stati[$byte_nr][$bit_nr].PHP_EOL; // echos "Engine start"
}
}
}