在PHP中将long int转换为字符串

时间:2012-06-30 13:15:36

标签: php flash-media-server

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

这是我的问题;我需要在PHP中将此数字转换为oAACAAAA。这样做有什么简短的方法或某种类型的库吗?否则我必须将this AS3 library转换为PHP。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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));