1

我将 FMS 与 PHP 一起使用,我需要客户端的 ID 以便在某些时候断开某些用户的连接。因此,我从 FMS 检索客户的 ID,但 FMS 将 ID 作为长整数发送,例如4702111234508538223.

这是我的问题;我需要将此数字转换为类似oAACAAAAPHP 中的数字。是否有任何捷径或某种图书馆可以做到这一点?否则我必须将此 AS3 库 转换为 PHP。

4

2 回答 2

2

这个函数将类似的东西转换"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;
}
于 2012-06-30T14:30:02.033 回答
2

您可以使用BC MathGMP 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));
于 2012-06-30T15:40:13.687 回答