我在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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top