PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

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 に対応しています。

  1. 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

  2. PHPのpack()関数とは?データをバイナリ文字列に変換する方法と書式指定子一覧

    PHPのpack()関数は、指定された書式(フォーマット)に従ってデータをバイナリ文字列にパックする関数です。バイナリファイルの生成やネットワークプロトコルの実装など、低レベルなデータ操作が必要な場面で活躍します。構文pack(format , args)パラメータformat − 使用する書式を指定します。指定できる主な値は以下の通りです。a − NULで埋められた文字列A − スペースで埋められた文字列h − 16進数文字列(下位ニブルが先)H − 16進数文字列(上位ニブルが先)c − 符号付きcharC − 符号なしchars − 符号付きshort(常に16ビット、マシンのバイト順)