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 環境で実行されます。