PHP中的pack(';V';)的反向操作是什么?

PHP中的pack(';V';)的反向操作是什么?,php,pack,Php,Pack,我看到这样的代码: $len = strlen($str1); $str = pack('V', $len) . $str1 . $str2; 做相反事情的代码是什么 据我了解,第一步是: $len = substr($str, 0, 4); $str = substr($str, 4); 但下一步是什么 $len = unpack(???); $str1 = substr($str, 0, $len); $str2 = substr($str, $len); 我不太明白如何将二进制$le

我看到这样的代码:

$len = strlen($str1);
$str = pack('V', $len) . $str1 . $str2;
做相反事情的代码是什么

据我了解,第一步是:

$len = substr($str, 0, 4);
$str = substr($str, 4);
但下一步是什么

$len = unpack(???);
$str1 = substr($str, 0, $len);
$str2 = substr($str, $len);

我不太明白如何将二进制
$len
转换回。。。二进制整数?我会使用普通语言中的简单类型转换或内存副本,但我对PHP不熟悉。

这只是删除此处添加的额外字符串的一种情况

$str=pack('V',$len)$str1$str2

把剩下的打开

例如:

// your code
$len = strlen($str1);
$str = pack('V', $len) . $str1 . $str2;

// unpacking
$length_of_packed_string = strlen($str) - strlen($str1 . $str2);
$unpacked = unpack('V', substr($str, 0, $length_of_packed_string));

print_r($unpacked);
请注意,这将返回一个数组,其值位于索引1(唯一的索引)-因此
$unpacket[1]
。有关原因的更多信息,请参阅上的“注释”部分


包装/拆包代码是不相关的(例如位于不同的位置),因此拆包侧没有
$str1
。为什么要计算压缩字符串的长度?它不是仅仅是
4
?@Аааааааааааааааа。如果它不是变量,您可以只执行
$len=unpack('V',substr($str,0,4))。但是没有办法计算出$str1或$str2是什么,因为它们只是串联在一起的。分隔符可能会有所帮助,我遗漏了一些东西,但这不是
$len
的作用吗?上面说长度
$str1
是。当然!我错过了