質問

Iは、PHPの文字列をフォーマット、符号なし32ビット整数を表し、(いくつかのデータ・ソースから来た)を有します。 私は後で私はPHPからそれを取得し(おそらく負)として使用できるように、署名済みの32ビット整数としてMySQLデータベース内に格納する必要がPHPはdoesnのため」(整数定数署名さt)を符号なし整数を持っています。

だから、私は必要なものの変換方法、のいずれかのPHPやMySQLのためです。それは(NOエンディアン/ 32/64ビットの問題)プラットフォームに依存すべきではない。

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

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

しかし、私はそれが(注意:キャストを行う際、MySQLは64ビット演算を使用しています)の周りに他の方法で動作し得ることができません。

感謝します。

役に立ちましたか?

解決 2

この:

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

それはやや遅いにもかかわらず、動作しているようです。

他のヒント

あなただけのPHPの整数に番号をキャストした場合、それはトリックを行います。

echo (int)3232240316 . "\n";

与えます。

-1062726980

注意:PHPでのunsigned int型に署名したint型にキャストしたい場合は、ちょうどこの操作を行います。

$number += 4294967296;

例:

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

与えます:

-1062726980
3232240316
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top