php tcp获取数据格式,php - 从TCP数据格式化N_STRING参数

我有一个gps设备通过tcp向我的服务器(linux和php侦听器)发送数据包,除了一个i/o状态之外,我有所有的参数。

TK207协议将该参数定义为:IO State

Length: 8 bits

Type: N_STRING

1:Main power, '0' means on power, '1' means off power。

2:ACC, '0' ACC close, '1' ACC open

3: blender, '0' Did not.start, '1' Just turning, '2' reverse turning。

4:Empty/heavy vehicles, '0' Did not.start, '1' Empty, '2' Heavy

5:Front door, '0' Did not start, ’1’ open, '2' close。

6: off the oil state, '1' '0' recovery oil

7: arm / disarm state, '1' '0' from the 8 fortification: there is no vibration

n_字符串定义:包含0.9的数字字符串。固定数字时,除特殊指令外,若缺少数字,请在左边填写ascii码0(ox30h)。

我得到这样的价值观编辑*

01000000

01000001

11000000

11000001

但是我无法从这个字符串中得到7个参数。

任何帮助都将不胜感激。

编辑:

在对字段进行定义之前,我正在看一些关于如何从该字段中检索on/off值的示例

$gpioInput = 0;

for ($i = 0; $i <= 7; $i++) {

$b = substr($gpioStr, 7 - $i, 1);

if ($b != "0") {

$gpioInput |= (1 << $i);

}

}

最佳答案

我的理解是,你试图访问一个“全局”值,它是所有字段的集合,如果是,它是“关闭”的,当任何数字为零,那么下一个代码应该是有用的。<?php

const TK207_MAIN_POWER_ON = 0;

const TK207_MAIN_POWER_OFF = 1;

const TK207_ACC_CLOSE = 0;

const TK207_ACC_OPEN = 1;

const TK207_BLENDER_DID_NOT_START = 0;

const TK207_BLENDER_JUST_TURNING = 1;

const TK207_BLENDER_REVERSE_TURNING = 2;

const TK207_VEHICLES_DID_NOT_START = 0;

const TK207_VEHICLES_EMPTY = 1;

const TK207_VEHICLES_HEAVY = 2;

const TK207_FRONT_DOOR_DID_NOT_START = 0;

const TK207_FRONT_DOOR_OPEN = 1;

const TK207_FRONT_DOOR = 2;

const TK207_OFF_THE_OIL_OFF = 0;

const TK207_OFF_THE_OIL_RECOVERY = 1;

const TK207_STATE_ARM = 0; // ???

const TK207_STATE_DISARM = 1; // ???

//-------------------------------

function isOn($str) {

return (int)array_reduce(str_split($str), function($carry, $item) {

$carry &= (bool)$item;

return $carry;

}, 1);

}

function getValues($str) {

return str_split($str);

}

function getOnOffValues($str) {

return array_map(function ($item) {

return (int)(bool)$item;

}, str_split($str));

}

//-------------------------------

$offStr = '11210211';

$onStr = '11211211';

echo isOn($offStr); // off

echo isOn($onStr); // on

list($mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm) = getValues($onStr);

var_dump([$mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm]);

list($mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm) = getOnOffValues($offStr);

var_dump([$mainPower, $acc, $blender, $vehicles, $frontDoor, $oil, $armDisarm]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值