|
packデータをバイナリ文字列にパックする 説明
string pack(string
$format, mixed ...$values)
指定された引数を この関数のアイデアは Perl からのものであり、フォーマット指定用の コードは Perl と同様に動作します。しかし、中には存在しない書式コードもあります。 たとえば Perl の "u" は存在しません。 符号付及び符号無しの区別は関数 unpack にのみ 影響を与えます。関数 pack は符号付及び符号無しの フォーマットコードのどちらでも同じ結果となることに注意しましょう。 パラメータ
戻り値バイナリ文字列を含むデータを返します。 変更履歴
例
例1 pack の例 この結果のバイナリ文字列の長さは 6 バイト長で、バイト列 0x12, 0x34, 0x78, 0x56, 0x41, 0x42となります。 注意警告
フォーマットコード 警告
PHP は、int 型の値を内部的に格納する際に サイズがマシン依存の符号付き値を使うことに注意しましょう。int 型の範囲外の数値となる整数リテラルや演算結果は float として保持されます。この float 値を integer としてパックする際には まず最初に integer 型へのキャストを行います。 その結果、できあがるバイトパターンは期待通りにはならないかもしれません。
この問題にもっとも関連するのが、符号なしの数値で int
型で表現できるものをパックする場合です。
int 型のサイズが 32 ビットであるシステムでのキャスト結果は、
(実装で定義されている標準 C の符号なし型から符号付き型への変換に依存しますが)
まるで int が符号なし整数であるかのような同一のバイトパターンになることがよくあります。
int 型のサイズが 64 ビットであるシステムでは、
たいていの場合は float の仮数部のサイズが足りず、
値の精度を損なわずに保持することができません。
ネイティブの 64 ビット C 参考
|