程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 介紹php在64位服務器上長整型的表示

介紹php在64位服務器上長整型的表示

編輯:PHP綜合

本文介紹php在64位服務器上長整型的表示。在 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環境中運行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved