以下为各各类型的实际长度。
$uid = 1346563572;
长度为10,直接为字符类型来计算
echo strlen($uid); // 10
转换短整型,长度为2,当然这里超过了短整型的值范围,所以高位数据会丢失
echo strlen(pack(‘s’,$uid)); // 2
转换为整型,长度为4
echo strlen(pack(‘i’,$uid)); // 4
转换成长整型,长度为4
echo strlen(pack(‘n’,$uid)); //4
其它类型都正确,唯独长整型在64bit机器上始终表示4位,应该为8bit才对,所以为了解决这种问题,在不丢失数据的数据,可采用以下方式进行转换。
$i = 333333333333333333;
$v = pack(“nn”,$i >> 32,$i&0xffffffff);
file_put_contents(“/tmp/long.txt”,$v);
echo strlen($v)
长度为8
读取可采用以下方式
$v = file_get_contents(“/tmp/long.txt”);
list ($hi,$lo) = array_values(unpack(“n*n*”,$v));
if ($hi if ($ho echo ($hi
备注:以上脚本均在64位版本的php环境中运行。
