static function fromBinString($binString) { $pdu = new self(); $buf = unpack('C*', $binString); $i = 1; $pdu->version = $buf[$i] >> 6; $pdu->type = $buf[$i] >> 4 & 0x3; $tkl = $buf[$i] & 15; $i++; $pdu->code = sprintf('%01d', $buf[$i] >> 5); $pdu->code .= '.' . sprintf('%02d', $buf[$i] & 0x7); $i += 2; $pdu->messageId = $buf[$i - 1] << 8 | $buf[$i]; if ($tkl > 0) { for ($i = $i; $i <= $tkl; $i++) { $pdu->token .= unpack('C', $buf[$i]); } } $i += $tkl + 1; if (isset($buf[$i])) { $prev = 0; while ($i <= count($buf) && $buf[$i] != 0xff) { $prev = $pdu->parseOption($buf, $i, $prev); } if ($i <= count($buf) && $buf[$i] == 0xff) { $pdu->readPayload($buf, $i + 1); } } else { // empty } return $pdu; }