danog / phpstruct
PHP implementation of python's struct module.
Installs: 7 059
Dependents: 0
Suggesters: 0
Security: 0
Stars: 11
Watchers: 4
Forks: 3
Open Issues: 0
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: 5.4.*
README
Licensed under MIT.
PHP implementation of Python's struct module.
This library was created to help me develop a client for the mtproto protocol.
It supports php 5.6, php 7 and HHVM.
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");