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
是。当然!我错过了