PHPのunpack()関数の使い方を徹底解説!フォーマットコード一覧と実例付き
PHPのunpack()関数は、バイナリ文字列からデータを展開(アンパック)するための関数です。pack()関数でパックしたバイナリデータや、ファイルから読み込んだバイナリデータを解析する際によく使われます。
構文
unpack(format, data)
パラメータ
format − データの展開に使用するフォーマットを指定します。指定可能な値は以下の通りです。
a − NUL埋めされた文字列
A − スペース(空白)埋めされた文字列
h − 16進数文字列(下位ニブルが先)
H − 16進数文字列(上位ニブルが先)
c − 符号付きchar(signed char)
C − 符号なしchar(unsigned char)
s − 符号付きshort(常に16ビット、マシンのバイト順)
S − 符号なしshort(常に16ビット、マシンのバイト順)
n − 符号なしshort(常に16ビット、ビッグエンディアン)
v − 符号なしshort(常に16ビット、リトルエンディアン)
i − 符号付き整数(サイズおよびバイト順はマシン依存)
I − 符号なし整数(サイズおよびバイト順はマシン依存)
l − 符号付きlong(常に32ビット、マシンのバイト順)
L − 符号なしlong(常に32ビット、マシンのバイト順)
N − 符号なしlong(常に32ビット、ビッグエンディアン)
V − 符号なしlong(常に32ビット、リトルエンディアン)
f − float(サイズおよび表現はマシン依存)
d − double(サイズおよび表現はマシン依存)
x − NULバイト(1バイト読み飛ばす)
X − 1バイト前に戻る
Z − NUL埋めされた文字列
@ − 指定した絶対位置までNULで埋める
data − 展開対象となるバイナリデータを指定します。
戻り値
unpack()関数は、成功した場合には連想配列を返し、失敗した場合にはfalseを返します。
使用例
次の例では、文字列「Jacob」を1バイトずつ符号なしcharとして展開し、各文字のASCIIコード(数値)を取得しています。
<?php
$var = "Jacob";
print_r(unpack("C*myint", $var));
?>
実行結果
上記のコードを実行すると、以下の出力が得られます。
Array
(
[myint1] => 74
[myint2] => 97
[myint3] => 99
[myint4] => 111
[myint5] => 98
)
このように、フォーマットコード「C*」を使うことで、文字列の各バイトが数値(ASCIIコード)として配列に格納されていることがわかります。「J」= 74、「a」= 97、「c」= 99、「o」= 111、「b」= 98 に対応しています。
-
PHPのlog()関数とは?自然対数の計算方法と使い方を解説
定義と使い方log() 関数は、数値の自然対数(natural logarithm)を計算します。対数とは、指数関数の逆演算のことです。たとえば 102=100 という関係は「log10100=2」と表せます。自然対数はオイラー数 e を底として計算され、PHP では定義済み定数 M_E によって e の値(2.7182818284590452354)が提供されています。具体例を挙げると、exp(4.60517018599)=100(つまり e4.60517018599=100)が成り立つため、loge100=4.60517018599 となります。PHP では、この自然対数(loge)を l
-
PHPのpack()関数とは?データをバイナリ文字列に変換する方法と書式指定子一覧
PHPのpack()関数は、指定された書式(フォーマット)に従ってデータをバイナリ文字列にパックする関数です。バイナリファイルの生成やネットワークプロトコルの実装など、低レベルなデータ操作が必要な場面で活躍します。構文pack(format , args)パラメータformat − 使用する書式を指定します。指定できる主な値は以下の通りです。a − NULで埋められた文字列A − スペースで埋められた文字列h − 16進数文字列(下位ニブルが先)H − 16進数文字列(上位ニブルが先)c − 符号付きcharC − 符号なしchars − 符号付きshort(常に16ビット、マシンのバイト順)