danog/phpstruct

Python struct模块的PHP实现。

1.2 2016-11-14 15:09 UTC

This package is auto-updated.

Last update: 2024-08-26 18:01:54 UTC


README

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

采用MIT许可证。

Python struct模块的PHP实现。

这个库是为了帮助我开发一个mtproto协议客户端而创建的。
它支持php 5.6、php 7和HHVM。

函数和格式与Python的struct模块(https://docs.pythonlang.cn/3/library/struct.html)中的完全相同

这个库可以用来将字符串、整数、浮点数、字符和布尔值打包/解包成字节。它比PHP原生的pack和unpack实现有很多优点,例如

  • 自定义字节序。
  • 许多有用的格式,这些格式在原生的实现中不存在。
  • pack和unpack的格式字符串语法与Python的struct模块相同。
  • unpack的结果是正常数字索引数组,从0开始,就像应该的那样。
  • unpack的结果具有类型转换的值(整数格式为int,布尔格式为bool,浮点格式为float,其他所有格式为字符串)。
  • 实现了calcsize函数。
  • 即使在32位系统上,也可以使用q和Q格式(缺点是精度有限)。
  • 支持@修饰符的填充。

目前,对于f和d格式,某些机器上可能无法正确地使用自定义字节大小。

安装

使用composer安装

composer require danog/phpstruct

使用方法

动态(推荐)

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");

动态(在实例化时指定格式字符串)

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;

静态

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