ホームページ >php教程 >php手册 >64 ビットサーバーでは、php の整数表現

64 ビットサーバーでは、php の整数表現

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:55:401479ブラウズ

PHP では、pack を使用してデータ型の変換を直接完了できます。たとえば、文字型を表すには、short integer 型、integer 型、long integer 型をパラメータ c、s、i、および N で表すことができます。もちろん、変換はここで行われます。結果のデータはバイナリ データなので、通常どおり読み取るには、バイナリ ストリームからデータを読み取り可能な文字型に変換することができます。
各タイプの実際の長さは次のとおりです。

$uid = 1346563572;

長さは 10 で、文字タイプとして直接計算されます

echo strlen($uid) // 10

;

short integer 型に変換すると、長さは 2 になります。当然、short integer 型の値の範囲を超えるため、上位のデータは失われます

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

整数型に変換、長さは 4

echo strlen(pack('i',$uid)) // 4

長整数に変換、長さは 4

echo strlen(pack('N',$uid)) //4

他の型は正しいですが、64 ビット マシンでは長整数型は常に 4 ビットを表すため、この問題を解決するには、次の方法を使用してデータを失わずにデータを変換できます。

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

長さは 8 です

次の方法で読み取りができます

$v = file_get_contents(“/tmp/long.txt”);
list ($hi,$lo) = array_values(unpack(“N*N*”,$v));
if ($hi if ($ho エコー ($hi

注: 上記のスクリプトはすべて 64 ビット バージョンの PHP 環境で実行されます。




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。