关于pack和unpack函数,官方介绍的一点疑问,
public static function uInt64($i, $endianness=false) {
$f = is_int($i) ? "pack" : "unpack";
if ($endianness === true) { // big-endian
$i = $f("J", $i);
}
else if ($endianness === false) { // little-endian
$i = $f("P", $i);
}
else if ($endianness === null) { // machine byte order
$i = $f("Q", $i);
}
return is_array($i) ? $i[1] : $i;
}
官方有介绍到‘J’、‘P’、‘Q’ 3种模式的用法,但我实际测试的时候缺发现一个问题,它这个函数写的是uInt64,就是无符号64位的int,但我实际测试的时候
$k=chr(200)."\t\0\t\t\t\t".chr(200);
var_dump(unpack("P",$k));
var_dump(unpack("J",$k));
var_dump(unpack("Q",$k));
array(1) {
[1]=>
int(-4032682056923215416)
}
array(1) {
[1]=>
int(-4032691952527275576)
}
array(1) {
[1]=>
int(-4032682056923215416)
}
打印的结果确是有符号的64位,有人知道是为啥么?如果是官方写错了,那转uInt64用到的是那几个参数呢?
你也看到了,你var_dump打印出来的是int,因为php压根没有uint