thesis/endian 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

thesis/endian

Composer 安装命令:

composer require thesis/endian

包简介

Library for encoding and decoding numbers in either big-endian or little-endian order.

README 文档

README

PHP Version Requirement GitHub Release Code Coverage

Pack and unpack binary integers and floats in any byte order.

Installation

composer require thesis/endian

Usage

use Thesis\Endian;

// Big endian (= network byte order)
$bytes = Endian\Order::Big->packInt32(-200);
$value = Endian\Order::Big->unpackInt32($bytes); // -200
$bytes = Endian\Order::Network->packInt32(-200);
$value = Endian\Order::Network->unpackInt32($bytes); // -200

// Little endian
$bytes = Endian\Order::Little->packFloat(2.2);
$value = Endian\Order::Little->unpackFloat($bytes); // 2.2

// Native byte order of the current machine
$order = Endian\Order::native(); // Order::Big or Order::Little

Design decisions

No narrow int types on input

Pack methods accept plain int rather than narrow PHPStan types like Int8 or Int32. This is intentional: requiring callers to carry and assert narrow types would flood driver code with redundant checks and type imports. Thus, we've decided to keep the validation on our side.

Bounds are checked with assert(), which means zero overhead in production when assertions are disabled (zend.assertions = -1).

No object wrappers for 8/16/32-bit

8/16/32-bit integers are represented as native PHP int, not value objects. This avoids allocation and method-call overhead on every pack/unpack — important in tight loops typical of binary protocol parsing.

64-bit integers

64-bit values use BcMath\Number to handle the full unsigned range beyond PHP_INT_MAX:

use Thesis\Endian;
use BcMath\Number;

$bytes = Endian\Order::Big->packUint64(new Number('18446744073709551615'));
$value = Endian\Order::Big->unpackUint64($bytes); // 18446744073709551615

Supported types

Type PHP type Range
int8 int −128 .. 127
uint8 int 0 .. 255
int16 int −32 768 .. 32767
uint16 int 0 .. 65535
int32 int −2147483648 .. 2147483647
uint32 int 0 .. 4294967295
int64 BcMath\Number −2⁶³ .. 2⁶³−1
uint64 BcMath\Number 0 .. 2⁶⁴−1
float float 32-bit IEEE 754
double float 64-bit IEEE 754

统计信息

  • 总下载量: 48.33k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 13
  • 依赖项目数: 7
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-01-16

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固