MadelineProto/vendor/danog/phpstruct
2016-07-29 17:19:25 +02:00
..
lib/danog/PHP Updated dependencies 2016-07-29 17:19:25 +02:00
tests/danog/PHP Updated dependencies 2016-07-29 17:19:25 +02:00
.gitignore Updated dependencies 2016-07-29 17:19:25 +02:00
.styleci.yml Fix syntax mistakes, added vendor dir. 2016-07-15 13:10:38 +02:00
.travis.yml Updated dependencies 2016-07-29 17:19:25 +02:00
composer.json Fix syntax mistakes, added vendor dir. 2016-07-15 13:10:38 +02:00
composer.lock Updated dependencies 2016-07-29 17:19:25 +02:00
example.php Updated dependencies 2016-07-29 17:19:25 +02:00
LICENSE Fix syntax mistakes, added vendor dir. 2016-07-15 13:10:38 +02:00
README.md Updated dependencies 2016-07-29 17:19:25 +02:00

PHPStruct class

Build Status Codacy Badge License Packagist download count Packagist HHVM Status StyleCI

Licensed under MIT.

PHP implementation of Python's struct module.

This library was created to help me develop a client for the mtproto protocol.

The functions and the formats are exactly the ones used in python's struct (https://docs.python.org/3/library/struct.html)

This library can be used to pack/unpack strings, ints, floats, chars and bools into bytes. It has lots of advantages over PHP's native implementation of pack and unpack, such as:

  • Custom byte endianness.
  • Lots of useful formats that aren't present in the native implementation.
  • The syntax of the format string of pack and unpack is the same as in python's struct module.
  • The result of unpack is normal numerically indexed array that starts from 0 like it should.
  • The result of unpack has type casted values (int for integer formats, bool for boolean formats, float for float formats and string for all of the other formats).
  • The calcsize function is implemented.
  • The q and Q formats can be used even on 32 bit systems (the downside is limited precision).
  • Padding is supported for the @ modifier.

For now custom byte size may not work properly on certain machines for the f and d formats.

Installation

Install using composer:

composer require danog/phpstruct

Usage

Dynamic (recommended)

require('vendor/autoload.php');
$struct = new \danog\PHP\StructClass();
$pack = $struct->pack("2cxi", "ab", 44);
$unpack = $struct->unpack("2cxi", $pack);
var_dump($unpack);
$count = $struct->calcsize("2cxi");

Dynamic (while specifying format string during istantiation)

require('vendor/autoload.php');
$struct = new \danog\PHP\StructClass("2cxi");
$pack = $struct->pack("ab", 44);
$unpack = $struct->unpack($pack);
var_dump($unpack);
$count = $struct->size;
$formatstring = $struct->format;

Static

require('vendor/autoload.php');
$pack = \danog\PHP\Struct::pack("2cxi", "ab", 44);
$unpack = \danog\PHP\Struct::unpack("2cxi", $pack);
var_dump($unpack);
$count = \danog\PHP\Struct::calcsize("2cxi");

Daniil Gentili