html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

在64位服务器上,php长整型的表示_PHP教程_编程技术

[ ] 已经帮助:人解决问题

php中,对数据类型的转换可直接使用pack来完成,比如表示字符型,短整型、整型、长整型可分别使用参数c、s、i、N来表示,当然这里转换后的数据为二进制数据,是不可读的,为了能正常读取,可直接unpack来将数据从二进制流还愿成可读的字符类型。
以下为各各类型的实际长度。uywHTML5中文学习网 - HTML5先行者学习网

$uid = 1346563572;uywHTML5中文学习网 - HTML5先行者学习网

长度为10,直接为字符类型来计算uywHTML5中文学习网 - HTML5先行者学习网

echo strlen($uid); // 10uywHTML5中文学习网 - HTML5先行者学习网

转换短整型,长度为2,当然这里超过了短整型的值范围,所以高位数据会丢失uywHTML5中文学习网 - HTML5先行者学习网

echo strlen(pack(‘s’,$uid)); // 2uywHTML5中文学习网 - HTML5先行者学习网

转换为整型,长度为4uywHTML5中文学习网 - HTML5先行者学习网

echo strlen(pack(‘i’,$uid)); // 4uywHTML5中文学习网 - HTML5先行者学习网

转换成长整型,长度为4uywHTML5中文学习网 - HTML5先行者学习网

echo strlen(pack(‘N’,$uid)); //4uywHTML5中文学习网 - HTML5先行者学习网

其它类型都正确,唯独长整型在64bit机器上始终表示4位,应该为8bit才对,所以为了解决这种问题,在不丢失数据的数据,可采用以下方式进行转换。uywHTML5中文学习网 - HTML5先行者学习网

$i = 333333333333333333;
$v = pack(“NN”,$i >> 32,$i&0xFFFFFFFF);
file_put_contents(“/tmp/long.txt”,$v);
echo strlen($v)uywHTML5中文学习网 - HTML5先行者学习网

长度为8uywHTML5中文学习网 - HTML5先行者学习网

读取可采用以下方式uywHTML5中文学习网 - HTML5先行者学习网

$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;uywHTML5中文学习网 - HTML5先行者学习网

备注:以上脚本均在64位版本的php环境中运行。uywHTML5中文学习网 - HTML5先行者学习网


uywHTML5中文学习网 - HTML5先行者学习网
uywHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助