Php 将四个字节转换为32位无符号整数

Php 将四个字节转换为32位无符号整数,php,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:

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

您可以使用将单个字节转换为整数,然后使用左移位和按位or运算符。第一个字节向左移动24位,第二个字节向左移动16位,第三个字节向左移动8位

$a = ord($seg[$findStart+0]);
$b = ord($seg[$findStart+1]);
$c = ord($seg[$findStart+2]);
$d = ord($seg[$findStart+3]);

$newInt = ($a << 24) | ($b << 16) | ($c << 8) | $d;
$a=ord($seg[$findStart+0]);
$b=ord($seg[$findStart+1]);
$c=ord($seg[$findStart+2]);
$d=ord($seg[$findStart+3]);

$newInt=($a这正是的目的,它接受格式字符串并从二进制字符串中提取数据

看看格式代码列表和您的示例,我相信您希望

N:无符号长(始终为32位,大端字节顺序)

所以它看起来像这样:

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

为了与旧版本的PHP兼容(我不擅长PHP,所以这肯定有一个简单的错误,这不起作用。
$len=($seg[$findStart+0]使用hexdec()获取单个字节值。我认为这里需要的函数是
ord()
,它将单个字节字符串解压成整数;相反的名为
asc()
,但它们实际上与ASCII无关。谢谢,这种“正常”的编程技巧现在也可以使用了。
(ord($seg[$findStart+0])哇,这是什么样的黑魔法,第一个版本不起作用,但兼容版本从二进制缓冲区中给了我正确的长度值。@我相信它起源于Perl,所以绝对是黑魔法。:)是如何在PHP中将字节数组转换成浮点。
$int = unpack("c{$findStart}ignore/Nvalue", $seg)['value'];