如何从投无符号32位整数的MySQL或PHP签署?
题
我在PHP的字符串,它表示格式化的无符号32位整数(从一些数据源来)。 我需要将其存储到一个MySQL数据库作为签名 32位整数,这样以后我可以从PHP检索它并把它作为一个(可能为负)符号整数常量(自PHP没有按”吨具有无符号整数)。
所以,我需要的是一种转换方法,无论是对PHP或MySQL。它不应该是平台相关的(无端/ 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
请注意:如果你想投一个签名int在PHP一个unsigned int,只是这样做:
$number += 4294967296;
示例:
$number = -1062726980;
echo $number . "\n";
$number += 4294967296;
echo $number . "\n";
给出:
-1062726980
3232240316
不隶属于 StackOverflow