Convert from 64bit number to 32bit number

孤者浪人 提交于 2019-12-17 17:05:26

问题


Trying a lot and just failing..

$x = 76561198005785475;

I want to this number, turn into this:

$y = 45519747;

That is the 32bit form of it.


Trying to explain with more details:

http://www.tonymarston.net/php-mysql/converter.php

1) Put the value 76561198005785475 on the "Decimal (input)" field. 2) Press "DEC to BIN" on the "Binary (Base 2)" field. 3) Count 32 starting from the RIGHT and copy it. 4) Paste the 32 chars binary number on "Binary (Base 2)" field. 5) Press "Bin to Dec" button on the "Binary (Base 2)" field.

Ok, now you can see the "45519747" number.


回答1:


Try this:

$y = $x & 0xffffffff;

This will truncate your 64-bit value to a 32-bit value, but note that there is absolutely no way to get the 64-bit value back, this is a destructive method.




回答2:


I tried many solution. But no one help me. Finally, following script save my life.

function intval32bits($value)
{
    $value = ($value & 0xFFFFFFFF);

    if ($value & 0x80000000)
        $value = -((~$value & 0xFFFFFFFF) + 1);

    return $value;
}



回答3:


This is too long to write into a comment, so I'll post it here instead.

@Kolink has the right answer; what you want is that operation. However, note that because your $x is too big to be stored in an int format anyway, it'll be held as a float in 32-bit computers, and floats suffer from precision loss. My pet theory on why you get 45519744 instead of the right answer is that your 32-bit computer lost the precision on the last digits. To see this in action, try this here:

$x = 76561198005785475;
echo (int)$x;

That site uses a 32-bit server, and it returns 45519744. This demonstrates the precision loss.

On the other hand, if you go here and run:

$x = 76561198005785475;
$y = $x & 0xffffff;

You get the right answer, because that site is 64-bit.

If you want to do the operation on a 32-bit machine (as you evidently do), I suggest you use gmp_and from the PHP GMP extension. Unfortunately I couldn't test to see if it works - I'll leave that to you.



来源:https://stackoverflow.com/questions/11691748/convert-from-64bit-number-to-32bit-number

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!