如何将long转换为有符号整数对

时间:2014-02-04 09:45:18

标签: php math

具有

$t = time();

如何最好地将$ t的值转换为签名的(16位)整数对,例如

21232,-16083

编辑:当前代码并不漂亮,但有效:

$t = time();
$h = $t >> 16;
$l = $t - ($h << 16);
if ($h > 32767) $h=$h - 65536;
if ($l > 32767) $l=$l - 65536;
echo $h . ',' . $l;

2 个答案:

答案 0 :(得分:1)

$thigh = $t >> 16;
$tlow = $t & 0xffff;
if($thigh >= (1<<15)) $thigh -= (1<<16);
if($tlow >= (1<<15)) $low -= (1<<16);

(编辑:嗯,这不是更漂亮,但它是如何工作的)

答案 1 :(得分:1)

以下是使用pack and unpack functions的方式:

$pair = unpack('slo/shi', pack('l', time())));
// $pair = array ('lo' => -4680, 'hi' => 21232)

不幸的是,这取决于你是在大端还是小端CPU上。由于PHP通常在兼容英特尔的硬件上运行,因此这对您来说可能不是问题。