首页 文章

如何将无符号的32位整数转换为MySQL或PHP中的签名?

提问于
浏览
8

我在PHP中有一个字符串(来自某些数据源),它表示格式化的无符号32位整数 . 我需要将它作为带符号的32位整数存储到MySQL数据库中,以便稍后我可以从PHP检索它并将其用作(可能为负)有符号整数常量(因为PHP没有无符号整数) .

所以,我需要的是一种转换方法,无论是PHP还是MySQL . 它不应该依赖于平台(没有endian / 32/64位问题) .

我知道如何使用MySQL将有符号整数转换为无符号整数:

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

但是我不能反过来工作(注意:MySQL在进行强制转换时使用64位算术) .

谢谢 .

2 回答

  • 0

    如果您只是将数字转换为PHP中的整数,它就可以解决问题 .

    echo (int)3232240316 . "\n";
    

    -1062726980
    

    注意:如果要在PHP中将signed int转换为unsigned int,只需执行以下操作:

    $number += 4294967296;
    

    例:

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

    得到:

    -1062726980
    3232240316
    
  • 3

    这个:

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

    似乎工作,即使它有点慢 .

相关问题