pack

(PHP 3, PHP 4, PHP 5)

pack -- データをバイナリ文字列にパックする

説明

string pack ( string format [, mixed args [, mixed ...]] )

指定された引数を format に基づいて バイナリ文字列にパックします。

この関数のアイデアは Perl からのものであり、フォーマット指定用の コードは Perl と同様に動作します。しかし、中には存在しない書式コードもあります。 たとえば Perl の "u" は存在しません。

符号付及び符号無しの区別は関数 unpack() にのみ 影響を与えます。関数 pack() は符号付及び符号無しの フォーマットコードのどちらでも同じ結果となることに注意しましょう。

PHP は内部的に値をマシン依存の大きさの符号付の integer 値として保持することにも注意してください。 このように保持するには大きすぎる符号無しの値を与えた場合、 float に変換する際にしばしば期待外れの結果となります。

パラメータ

format

フォーマット文字列は、 フォーマットコードの後にオプションの反復指定用引数が続く形式と なっています。反復指定用引数として整数値、または入力データの最後まで 反復を意味する * のどちらかを指定することができます。 a, A, h, H の場合、 反復数はそのデータ引数が取得する文字の数を指定します。反復数が @ の場合、 次のデータを置く場所の絶対位置を表します。その他の場合、反復数は データ引数が使われる数を指定し、結果のバイナリ文字列にパックされます。

現在、実装されているものを以下に示します。

表 1. pack() の書式文字

コード説明
aNUL で埋めた文字列
A空白で埋めた文字列
h十六進文字列、下位ニブルが先
H十六進文字列、上位ニブルが先
csigned char
Cunsigned char
ssigned short (常に 16 ビット、マシンのバイトオーダー)
Sunsigned short (常に 16 ビット、マシンのバイトオーダー)
nunsigned short (常に 16 ビット、ビッグエンディアンバイトオーダー)
vunsigned short (常に 16 ビット、リトルエンディアンバイトオーダー)
isigned integer (サイズおよびバイトオーダーはマシン依存)
Iunsigned integer (サイズおよびバイトオーダーはマシン依存)
lsigned long (常に 32 ビット、マシンのバイトオーダー)
Lunsigned long (常に 32 ビット、マシンのバイトオーダー)
Nunsigned long (常に 32 ビット、ビッグエンディアンバイトオーダー)
Vunsigned long (常に 32 ビット、リトルエンディアンバイトオーダー)
ffloat (サイズおよび表現はマシン依存)
ddouble (サイズおよび表現はマシン依存)
xNUL バイト
X1 バイト戻る
@絶対位置まで NUL で埋める

args

返り値

バイナリ文字列を含むデータを返します。

例 1. pack() の例

<?php
$binarydata
= pack("nvc*", 0x1234, 0x5678, 65, 66);
?>

この結果のバイナリ文字列の長さは 6 バイト長で、バイト列 0x12, 0x34, 0x78, 0x56, 0x41, 0x42となります。

参考

unpack()