我将 FMS 与 PHP 一起使用,我需要客户端的 ID 以便在某些时候断开某些用户的连接。因此,我从 FMS 检索客户的 ID,但 FMS 将 ID 作为长整数发送,例如4702111234508538223
.
这是我的问题;我需要将此数字转换为类似oAACAAAA
PHP 中的数字。是否有任何捷径或某种图书馆可以做到这一点?否则我必须将此 AS3 库 转换为 PHP。
我将 FMS 与 PHP 一起使用,我需要客户端的 ID 以便在某些时候断开某些用户的连接。因此,我从 FMS 检索客户的 ID,但 FMS 将 ID 作为长整数发送,例如4702111234508538223
.
这是我的问题;我需要将此数字转换为类似oAACAAAA
PHP 中的数字。是否有任何捷径或某种图书馆可以做到这一点?否则我必须将此 AS3 库 转换为 PHP。
这个函数将类似的东西转换"4702111234525315439"
成类似的东西"oAADAAAA"
:
function convert_id_to_str($id)
{
if (strspn($id, '0123456789') != strlen($id)) {
return false;
}
$str = '';
if (PHP_INT_SIZE >= 8) {
while ($id) {
$str .= chr($id & 255);
$id >>= 8;
}
} else {
while ($id) {
$str .= chr(bcmod($id, '256'));
$id = bcdiv($id, '256', 0);
}
}
return $str;
}
您可以使用BC Math或GMP PHP 功能来确保在支持 32 位和 64 位 PHP 的服务器上处理 64 位数字,然后pack
将结果转换为格式化字符串,例如:
$id = "4702111234508538223";
$hi = bcdiv($id, pow(2, 32));
$lo = bcsub($id, bcmul($hi, pow(2, 32)));
var_dump(pack("LL", $lo, $hi));
退货string(8) "oAACAAAA"
。代码是爆炸的,但也可以很容易地转换为单行代码或函数。使用大数字扩展确保与 32 位平台的兼容性,但如果您确定托管 PHP 解释器的平台具有 64 位功能,您可以使用
pack("LL", $id, $id / pow(2, 32));