我找到了一些解决方案Efficient way of doing 64 bit rotate using 32 bit values,但它不在PHP中。
最大的问题是我从远程服务器大整数9223372036854775808(10)
获得hexadecimal 8000000000000000(16)
。
没有机会在生产服务器上启用php_gmp (extension)
,但我必须检查接收值中的选定位。生产和开发服务器都是32bits machines
。
答案 0 :(得分:1)
您可以使用BC Math(任意精度数学)完成此任务:
BC Math允许您对数字执行数学运算。使用算术运算符和使用BC Maths之间的区别在于,不是将数字存储为整数或浮点数,BC Math会将数字作为字符串返回。
http://php.net/manual/en/ref.bc.php
PHP必须使用BC Math编译;但大多数PHP安装都应该有这个。
不幸的是,您无法对字符串执行按位操作,并且BC Math没有任何内置的按位函数。然而;在做了一些谷歌搜索之后,我发现了以下代码示例,我在下面复制并粘贴了它:
function bitValue($no) { return bcpow(2, $no); }
function bitSet($no, $value) {
$tmp = bcmod($value, bitValue($no+1));
return bccomp(bcsub($tmp, bitValue($no)), 0)>= 0;
}
echo bitSet(49, bitValue(48)) ."\n";
echo bitSet(48, bitValue(48)) ."\n";
echo bitSet(47, bitValue(48)) ."\n";
(致hernst42的信用)