如何将十六进制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
答案 0 :(得分:1)
if(bccomp($x, bcpow(2, 63)) >= 0) {
$x = bcsub($x, bcpow(2, 64);
}