我正在使用FMS和PHP,我需要客户端的ID才能在某些时候断开某些用户。因此,我从FMS检索客户端ID,但FMS将ID作为long int发送,例如4702111234508538223
。
这是我的问题;我需要在PHP中将此数字转换为oAACAAAA
。这样做有什么简短的方法或某种类型的库吗?否则我必须将this AS3 library转换为PHP。
答案 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 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));