我在 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/