9

PHPに文字列(データソースから取得)があります。これは、フォーマットされた符号なし32ビット整数を表します。後でPHPから取得して(おそらく負の)符号付き整数定数として使用できるように、MySQLデータベースに符号付き32ビット整数として格納する必要があります(PHPには符号なし整数がないため)。

したがって、必要なのは、PHPまたはMySQLのいずれかの変換方法です。プラットフォームに依存するべきではありません(エンディアン/ 32/64ビットの問題はありません)。

MySQLを使用して符号付き整数を符号なしに変換する方法を知っています。

select CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER);
+------------------------------------------------------+
| CAST((-1062726980 & 0xFFFFFFFF) AS UNSIGNED INTEGER) |
+------------------------------------------------------+
|                                           3232240316 | 
+------------------------------------------------------+

しかし、私はそれを逆に動作させることはできません(注:MySQLはキャストを行うときに64ビット演算を使用します)。

ありがとう。

4

3 に答える 3

3

PHPで数値を整数にキャストするだけで、うまくいきます。

echo (int)3232240316 . "\n";

与える

-1062726980

注:PHPでsignedintをunsignedintにキャストする場合は、次のようにします。

$number += 4294967296;

例:

$number = -1062726980;
echo $number . "\n";
$number += 4294967296;
echo $number . "\n";

与える:

-1062726980
3232240316
于 2009-07-18T13:23:42.900 に答える
0

これ:

$val = (bccomp("2147483647", $val) < 0) ? bcsub($val, "4294967296") : $val;

多少遅いですが、動作しているようです。

于 2009-07-19T10:31:00.627 に答える