Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的行为PHP解包_Php_Unpack - Fatal编程技术网

奇怪的行为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("

帮助了解PHP的
解包
的工作原理

我知道在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)
}