课程咨询 :027-87185216 QQ:2490085651

武汉PHP培训 > 达内新闻 > 在64位服务器上,php长整型的表示
  • 在64位服务器上,php长整型的表示

    发布:第一PHP社区      来源:第一PHP社区      时间:2016-06-22

  • php中,对数据类型的转换可直接使用pack来完成,比如表示字符型,短整型、整型、长整型可分别使用参数c、s、i、N来表示,当然这里转换后的数据为二进制数据,是不可读的,为了能正常读取,可直接unpack来将数据从二进制流还愿成可读的字符类型。
    以下为各各类型的实际长度。
    $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 <0) $hi += (1 < < 32);
    if ($ho <0) $lo += (1 << 32);
    echo ($hi << 32) + $lo;
    备注:以上脚本均在64位版本的php环境中运行。

    推荐文章

上一篇:PHP内存池中的存储层

下一篇:PHP的16进制互转

最新开班日期  |  更多

PHP高级开发工程师定制班

PHP高级开发工程师定制班

开班日期:12/29

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:12/29

PHP高级开发工程师精品班

PHP高级开发工程师精品班

开班日期:12/29

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:12/29

  • 地址:武汉市洪山区洪山亚贸广场B座12楼
  • 课程培训电话:027-87185216 QQ:2490085651     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56