php - 将 4 个字节转换为 32 位无符号整数

标签 php

我在 PHP 脚本中有一个很大的二进制缓冲区,正在查找特定位置。我需要将 4 字节值转换为 32 位整数。

$seg = hex2bin("AABBCC00010014AABBCC");
$findStart=3;
echo bin2hex($seg[$findStart+0]);
echo bin2hex($seg[$findStart+1]);
echo bin2hex($seg[$findStart+2]);
echo bin2hex($seg[$findStart+3]);

Prints:
00010014

我需要将seg[findStart+0 .. findStart+3]转换为32位整数。如何在 PHP 脚本中做到这一点?此示例是十进制数 65556。

最佳答案

这正是 the unpack function 的目的,它采用格式字符串并从二进制字符串中提取数据。

查看格式代码列表和您的示例,我相信您想要

N: unsigned long (always 32 bit, big endian byte order)

所以它看起来像这样:

$int = unpack('Nvalue', $seg, $findStart)['value'];

为了与旧版本的 PHP (<7.1) 兼容,您可以通过将固定数量的字节消耗到忽略的变量中来模拟偏移参数:

$int = unpack("c{$findStart}ignore/Nvalue", $seg)['value'];

关于php - 将 4 个字节转换为 32 位无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762701/

相关文章:

php - 当验证条件存储在 SQL 数据库中时如何验证用户的日期输入

php - 在 JOIN 查询中获取平均值,适用于原始 MySql,但不适用于 Laravel 查询构建器

php - 用 <?php 替换 PHP 短打开标签的批处理脚本

PHP:mysql_connect 函数的返回值是 bool 值还是凭证本身?

php - 一页查询请求过多

php - 使用内存引用比较 PHP 数组

php - Laravel 中的字符串插值

php - 添加自定义验证消息以在 Laravel 5.3 中自定义验证不起作用

php ReSTLer 路由

php - Composer 未找到类 'Slim\Slim'