日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在64位服務(wù)器上,php長(zhǎng)整型的表示

 深入敵后_ 2013-04-17

在64位服務(wù)器上,php長(zhǎng)整型的表示

來(lái)源: 作者: 發(fā)表于:2012-08-18 10:59  點(diǎn)擊:69
php中,對(duì)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換可直接使用pack來(lái)完成,比如表示字符型,短整型、整型、長(zhǎng)整型可分別使用參數(shù)c、s、i、N來(lái)表示,當(dāng)然這里轉(zhuǎn)換后的數(shù)據(jù)為二進(jìn)制數(shù)據(jù),是不可讀的,為了能正常讀取,可直接unpack來(lái)將數(shù)據(jù)從二進(jìn)制流還愿成可讀的字符類(lèi)型。 以下為各各

php中,對(duì)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換可直接使用pack來(lái)完成,比如表示字符型,短整型、整型、長(zhǎng)整型可分別使用參數(shù)c、s、i、N來(lái)表示,當(dāng)然這里轉(zhuǎn)換后的數(shù)據(jù)為二進(jìn)制數(shù)據(jù),是不可讀的,為了能正常讀取,可直接unpack來(lái)將數(shù)據(jù)從二進(jìn)制流還愿成可讀的字符類(lèi)型。
以下為各各類(lèi)型的實(shí)際長(zhǎng)度。

$uid = 1346563572;

長(zhǎng)度為10,直接為字符類(lèi)型來(lái)計(jì)算

echo strlen($uid); // 10

轉(zhuǎn)換短整型,長(zhǎng)度為2,當(dāng)然這里超過(guò)了短整型的值范圍,所以高位數(shù)據(jù)會(huì)丟失

echo strlen(pack(‘s’,$uid)); // 2

轉(zhuǎn)換為整型,長(zhǎng)度為4

echo strlen(pack(‘i’,$uid)); // 4

轉(zhuǎn)換成長(zhǎng)整型,長(zhǎng)度為4

echo strlen(pack(‘N’,$uid)); //4

其它類(lèi)型都正確,唯獨(dú)長(zhǎng)整型在64bit機(jī)器上始終表示4位,應(yīng)該為8bit才對(duì),所以為了解決這種問(wèn)題,在不丟失數(shù)據(jù)的數(shù)據(jù),可采用以下方式進(jìn)行轉(zhuǎn)換。

$i = 333333333333333333;
$v = pack(“NN”,$i >> 32,$i&0xFFFFFFFF);
file_put_contents(“/tmp/long.txt”,$v);
echo strlen($v)

長(zhǎng)度為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環(huán)境中運(yùn)行。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多