PHP と共に FMS を使用しています。ある時点で一部のユーザーを切断するには、クライアントの ID が必要です。そのため、FMS からクライアントの ID を取得しますが、FMS は ID を4702111234508538223
.
これが私の問題です。oAACAAAA
この数値をPHPのような数値に変換する必要があります。これを行うための短い方法や何らかのライブラリが存在しますか? それ以外の場合は、この AS3 ライブラリ を PHPに変換する必要があります。
PHP と共に FMS を使用しています。ある時点で一部のユーザーを切断するには、クライアントの 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));