64bit机器上,php长整型的表示

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环境中运行。

机器人 2010年12月19日 17:57 于 北京

此条目发表在 LAMP 分类目录。将固定链接加入收藏夹。

64bit机器上,php长整型的表示》有 41 条评论

  1. 膜法世家 说:

    有没有视频演示呢

  2. gxg 说:

    顶了,支持

  3. 德菲斯 说:

    我不是很懂,要学习了

  4. 玫子轩 说:

    博客风格我还是喜欢侧栏在左边, 你的….

  5. 这些代码对于我来说,感觉挺神秘的!呵呵

  6. 回贴是一种美德,一定要不断的支持楼主才能看到更有水平的文章!!!http://www.wdkc.info/

  7. 土财主 说:

    顶一个,我喜欢这文章,写的不错

  8. 赴港产子 说:

    楼主的一句话胜读数十年的书啊。

  9. 听说PHP会大力发展呢,呵呵。。。

  10. GXG1978 说:

    PHP是未来的趋势,所以还是很被看好的!

  11. 鸿星尔克 说:

    64位在实际的应用中还是有些很难避开的bug!

  12. 80后创业 说:

    回贴是一种美德

  13. jackyfan 说:

    又学习到了一个新的知识点

  14. 韩都衣舍 说:

    没想到居然是这样。

  15. 大南阳 说:

    做过的项目中暂时没有用到的地方,先记下,以后备用

  16. 茵曼女装 说:

    我最近彻底被64位系统击败了,义无反顾的回到32bit的世界!!!

  17. 茵奈儿 说:

    高科技的东西伤不起啊!

  18. kweu2a博主威武,文章不错,留言了

  19. 狐狼 说:

    突然发现,是找了很久的。

  20. 甲减 说:

    嗯嗯。博主很不错写的。www.jiajian120.com 嘘唏了

  21. 换肤堂 说:

    这个以前还真没有遇到过这样的问题!

  22. 东京著衣 说:

    我喜欢这种文章,也很帮助我,谢谢了楼主了

  23. maibuy 说:

    恩,对这个问题要好好研究,mark一下

  24. 喜利多 说:

    如果再加上一点图片或者视频什么的,就好了

  25. 波若兰 说:

    有点像我们以前学的vf,不过,我不懂

  26. g2mc2i这么累 安吉白茶批发一下吧

  27. 木木家 说:

    恩,学习了,谢谢博主了

  28. 白素贞: 法海,你不懂爱! 法海: 老子连地段最繁华的雷峰塔都给你了,你还想怎样! 白素贞: Kao,可是开门的钥匙只有你那一把,都几百年了,从没有男人进来过,你这2货……

  29. 一对夫妇避孕失败后生了一个小男孩,孩子一生出来就紧握拳头,一直笑个不停。护士把他的拳头一掰开.发现里面有一把避孕药,接着小男孩开口说话了: 你们两个想弄死我,没那么容易,哈哈哈哈.........

  30. 金共痔劣 说:

    杭州东方魅力官方博客http://donfangmeili.qzone.qq.com

    欢迎大家积极光顾

    杭州东方魅力官方网址:www.dongfangmeili.cn

  31. Pingback 引用通告: 款韩国时尚女装系列品牌

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>