我使用的是PHP 5.3.
在我的32位系统上INT的大小:
print "PHP_INT_MAX: " . PHP_INT_MAX . "\n";
print "PHP_INT_SIZE: " . PHP_INT_SIZE . " bytes (" . (PHP_INT_SIZE * 8) . " bits)\n";
Run Code Online (Sandbox Code Playgroud)
但是,我使用的编码算法的一部分依赖于int是上述大小(4个字节)的事实.当我在我的Web主机服务器上运行代码时,它是一个64位系统,int大小是两倍大.
有没有办法强制"(int)"强制转换使用32位大小?
例如,假设以下代码:
$test = 4170266799;
print $test;
print (int) $test;
Run Code Online (Sandbox Code Playgroud)
在我的32位系统上,输出是:
4170266799
-124700497
Run Code Online (Sandbox Code Playgroud)
在我的64位系统上,输出是:
4170266799
4170266799
Run Code Online (Sandbox Code Playgroud)
即使架构从32位更改为64位,是否可以强制INT的值为4个字节?
参考Stack Overflow 上的这个问题,我找到了一个在我的早期测试中似乎有效的解决方案:
function thirtyTwoBitIntval($value)
{
if ($value < -2147483648)
{
return -(-($value) & 0xFFFFFFFF);
}
elseif ($value > 2147483647)
{
return ($value & 0xFFFFFFFF);
}
return $value;
}
$test = 4170266799;
print $test;
print (int) $test;
print thirtyTwoBitIntval($test);
Run Code Online (Sandbox Code Playgroud)
32位系统上的输出是:
4170266799 # $test = 4170266799
-124700497 # (int) $test
-124700497 # thirtyTwoBitIntval($test);
Run Code Online (Sandbox Code Playgroud)
64位系统上的输出是:
4170266799 # $test = 4170266799
4170266799 # (int) $test
-124700497 # thirtyTwoBitIntval($test);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7367 次 |
| 最近记录: |