1
0
mirror of https://github.com/danog/PHPStruct.git synced 2024-11-26 11:44:39 +01:00
Go to file
2016-07-28 15:48:09 +02:00
lib/danog/PHP Applied fixes from StyleCI 2016-07-28 09:37:03 -04:00
tests/danog/PHP Fixed parsing of modifiers and enabled internal integer conversion module. 2016-07-28 15:34:14 +02:00
.gitignore Fixed unpacking of signed negative numbers. 2016-07-25 12:40:16 +02:00
.styleci.yml Added styleci tests and badge 2016-07-13 19:59:59 +02:00
.travis.yml Update tests 2016-07-28 15:47:57 +02:00
composer.json Update badge url and composer.json 2016-07-15 12:56:16 +02:00
composer.lock Adapting for 32 bit systems 2016-07-21 15:43:11 +02:00
example.php Applied fixes from StyleCI 2016-07-28 09:37:03 -04:00
example.py Reorganizing code... 2016-07-26 15:17:52 +02:00
LICENSE First commit (master) 2016-07-04 01:43:23 +02:00
README.md Reorganized even more classes and implemented padding for the @ format. 2016-07-28 13:40:22 +02:00

PHPStruct class

Build Status Codacy Badge Packagist Packagist HHVM 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).
  • Pack is more strict about the type of input formats.
  • The calcsize function is implemented.
  • The q and Q formats can be used even on 32 bit systems.

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