【发布时间】:2011-03-16 23:16:01
【问题描述】:
为什么我会在 x64 架构上得到以下输出?
$ php -r 'echo pow(2, 33) . "\n";print_r(unpack("Ivalue", pack("I", pow(2, 33))));'
8589934592
Array
(
[value] => 0
)
它似乎可以处理带符号的 64 位整数,但不能打包/解包它们。根据文档http://us3.php.net/pack,I 的大小应该取决于机器,在这种情况下是 64 位。
$ php -r 'echo PHP_INT_MAX;'
9223372036854775807
$ php -v
PHP 5.2.9 (cli) (built: Apr 17 2009 03:29:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
【问题讨论】:
-
echo PHP_INT_MAX;带给你什么? -
你运行的是什么版本的 PHP?
-
@Wrikken 和@R。希尔,请参阅上面的编辑。
-
我也是64位的机器,bin2hex(pack("I",pow(2,33)))的输出确实是"00000000",所以就好像机器- 依赖整数是 32 位的,无论底层架构如何。我想“机器相关”意味着永远不要假设一个特定的大小,即使是关于一个正在运行的环境。一个想法:由于 pack() 没有为高于 32 位整数的任何内容提供显式格式,因此我们不能期望包含更多 32 位整数的整数可能被打包是有道理的。在这种情况下,“机器相关”实际上是指 16 位或 32 位。
标签: php binary 64-bit pack unpack