(PHP 4, PHP 5)
pack — データをバイナリ文字列にパックする
指定された引数を format に基づいて バイナリ文字列にパックします。
この関数のアイデアは Perl からのものであり、フォーマット指定用の コードは Perl と同様に動作します。しかし、中には存在しない書式コードもあります。 たとえば Perl の "u" は存在しません。
符号付及び符号無しの区別は関数 unpack() にのみ 影響を与えます。関数 pack() は符号付及び符号無しの フォーマットコードのどちらでも同じ結果となることに注意しましょう。
PHP は内部的に値をマシン依存の大きさの符号付の integer 値として保持することにも注意してください。 このように保持するには大きすぎる符号無しの値を与えた場合、 float に変換する際にしばしば期待外れの結果となります。
フォーマット文字列は、 フォーマットコードの後にオプションの反復指定用引数が続く形式と なっています。反復指定用引数として整数値、または入力データの最後まで 反復を意味する * のどちらかを指定することができます。 a, A, h, H の場合、 反復数はそのデータ引数が取得する文字の数を指定します。反復数が @ の場合、 次のデータを置く場所の絶対位置を表します。その他の場合、反復数は データ引数が使われる数を指定し、結果のバイナリ文字列にパックされます。
現在、実装されているものを以下に示します。
| コード | 説明 |
|---|---|
| a | NUL で埋めた文字列 |
| A | 空白で埋めた文字列 |
| h | 十六進文字列、下位ニブルが先 |
| H | 十六進文字列、上位ニブルが先 |
| c | signed char |
| C | unsigned char |
| s | signed short (常に 16 ビット、マシンのバイトオーダー) |
| S | unsigned short (常に 16 ビット、マシンのバイトオーダー) |
| n | unsigned short (常に 16 ビット、ビッグエンディアンバイトオーダー) |
| v | unsigned short (常に 16 ビット、リトルエンディアンバイトオーダー) |
| i | signed integer (サイズおよびバイトオーダーはマシン依存) |
| I | unsigned integer (サイズおよびバイトオーダーはマシン依存) |
| l | signed long (常に 32 ビット、マシンのバイトオーダー) |
| L | unsigned long (常に 32 ビット、マシンのバイトオーダー) |
| N | unsigned long (常に 32 ビット、ビッグエンディアンバイトオーダー) |
| V | unsigned long (常に 32 ビット、リトルエンディアンバイトオーダー) |
| f | float (サイズおよび表現はマシン依存) |
| d | double (サイズおよび表現はマシン依存) |
| x | NUL バイト |
| X | 1 バイト戻る |
| @ | 絶対位置まで NUL で埋める |
バイナリ文字列を含むデータを返します。
例1 pack() の例
<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
この結果のバイナリ文字列の長さは 6 バイト長で、バイト列 0x12, 0x34, 0x78, 0x56, 0x41, 0x42となります。