在 PHP 中将长整型转换为字符串


Converting long int to string in PHP

我正在使用FMS和PHP,我需要客户端的ID才能在某个时候断开某些用户的连接。因此,我从FMS检索客户端的ID,但FMS将ID作为长整型发送,例如4702111234508538223

这是我的问题;我需要将此数字转换为类似于 PHP 中的 oAACAAAA 号。是否有任何捷径或某种库可以做到这一点?否则,我必须将此 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));