奇怪的行为PHP解包
帮助了解PHP的奇怪的行为PHP解包,php,unpack,Php,Unpack,帮助了解PHP的解包的工作原理 我知道在ruby中我可以使用unpack: “abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh”。打开包装(“NnnnnN”) =>[1638379242595826472116171251871684366951] 在PHP中也是如此。但实际上,它并没有真正起作用 我需要6个元素的数组。让我们试着得到它 $bytes = openssl_random_pseudo_bytes(16); var_dump(unpack("
解包的工作原理
我知道在ruby中我可以使用unpack:
“abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh”。打开包装(“NnnnnN”)
=>[1638379242595826472116171251871684366951]
在PHP中也是如此。但实际上,它并没有真正起作用
我需要6个元素的数组。让我们试着得到它
$bytes = openssl_random_pseudo_bytes(16);
var_dump(unpack("NnnnnN", $bytes));
array(1) {
["nnnnN"]=>
int(2679895791)
}
var_dump(unpack("N/n/n/n/n/N", $bytes));
array(1) {
[1]=>
int(600384068)
}
var_dump(unpack("N1/n1/n1/n1/n1/N1", $bytes));
array(1) {
[1]=>
int(600384068)
}
var_dump(unpack("N1n1n1n1n1N", $bytes));
array(1) { ["n1n1n1n1N"]=> int(2679895791) }
我找到了解决办法:
var_dump(array_values(unpack("N1a/n1b/n1c/n1d/n1e/N1f", $bytes)));
array(6) {
[0]=>
int(2679895791)
[1]=>
int(39295)
[2]=>
int(42804)
[3]=>
int(32471)
[4]=>
int(39559)
[5]=>
int(600384068)
}
但我认为有一点黑魔法。请提示如何正确使用解包
功能而不使用别名
(如N1a)和数组值
?否。每种格式都会自行计算并覆盖以前的值:
var_dump(解包(“N”,$bytes))代码>
var_dump(解包(“N/N”,$bytes))代码>
var_转储(解包(“N/n2”,$bytes))代码>
它实际上在您链接的文档上:
小心
请注意,如果不命名元素,将使用空字符串。如果不命名多个元素,这意味着某些数据会被覆盖,因为键相同[…]
array(1) {
[1]=>
int(824184250)
}
array(1) {
[1]=>
int(32979)
}
array(2) {
[1]=>
int(32979)
[2]=>
int(48930)
}