尝试了很多而且失败了..
$x = 76561198005785475;
我想要这个号码,转到这个:
$y = 45519747;
这是它的32位形式。
尝试解释更多细节:
http://www.tonymarston.net/php-mysql/converter.php
1)将值76561198005785475放在“十进制(输入)”字段中。 2)在“二进制(Base 2)”字段中按“DEC to BIN”。 3)从右边开始计数32并复制它。 4)在“Binary(Base 2)”字段上粘贴32个字符的二进制数。 5)按“Binary(Base 2)”字段中的“Bin to Dec”按钮。
好的,现在您可以看到“45519747”号码。
答案 0 :(得分:14)
试试这个:
$y = $x & 0xffffffff;
这会将您的64位值截断为32位值,但请注意,绝对无法恢复64位值,这是一种破坏性方法。
答案 1 :(得分:2)
我尝试了很多解决方案。但没有人帮助我。最后,遵循脚本拯救我的生命。
function intval32bits($value)
{
$value = ($value & 0xFFFFFFFF);
if ($value & 0x80000000)
$value = -((~$value & 0xFFFFFFFF) + 1);
return $value;
}
答案 2 :(得分:1)
写入评论的时间太长,所以我会在这里发布。
@Kolink有正确的答案;你想要的是那个操作。但请注意,由于您的$x
太大而无法以int
格式存储,因此它将在32位计算机中保留为float
,{{1}遭受精确损失。我的宠物理论为什么你得到45519744而不是正确的答案是你的32位计算机丢失了最后数字的精度。要查看此操作,请尝试以下here:
float
该站点使用32位服务器,并返回45519744.这表明精度损失。
另一方面,如果你去here并运行:
$x = 76561198005785475;
echo (int)$x;
您得到正确答案,因为该网站是64位。
如果你想在32位机器上进行操作(你显然这样做),我建议你使用PHP GMP扩展中的gmp_and。不幸的是,我无法测试它是否有效 - 我会把它留给你。
答案 3 :(得分:0)
我有类似的东西。从 Int64 转换为 Int32 时,我想考虑溢出。这段代码很适合我:
function intval32bits($value)
{
$value = ($value & 0xFFFFFFFF);
if ($value & 0x80000000)
$value = -((~$value & 0xFFFFFFFF) + 1);
return $value;
}