在php上签名的十六进制到int 64

时间:2013-02-10 02:09:16

标签: php

如何将十六进制A67BFE427CBDC58F转换为int 64签名-6450282479763995249?

function bchexdec($hex) {
 if(strlen($hex) == 1) {
     return hexdec($hex);
 } else {
     $remain = substr($hex, 0, -1);
     $last = substr($hex, -1);
     $x = bcadd(bcmul(16, bchexdec($remain)), hexdec($last));
     return $x;
 }

bchexdec(' A67BFE427CBDC58F')== 11996461593945556367。 这是正确的,但没有迹象(( 如何将unsigned转换为signed?

PHP 5.3+; PHP_INT_SIZE == 4

1 个答案:

答案 0 :(得分:1)

if(bccomp($x, bcpow(2, 63)) >= 0) {
    $x = bcsub($x, bcpow(2, 64);
}