1

PHP と共に FMS を使用しています。ある時点で一部のユーザーを切断するには、クライアントの ID が必要です。そのため、FMS からクライアントの ID を取得しますが、FMS は ID を4702111234508538223.

これが私の問題です。oAACAAAAこの数値をPHPのような数値に変換する必要があります。これを行うための短い方法や何らかのライブラリが存在しますか? それ以外の場合は、この 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 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));
于 2012-06-30T15:40:13.687 に答える