unpack

バイナリーを Perl 変数に変換する

構文

解説

unpack は、 pack と逆の操作を行います。 つまり、バイナリーを Perl 変数に変換します。

unpack は、TEMPLATE に与えられたルールに基づいて、 EXPR のバイナリーデータを Perl の変数のリストに変換します。 スカラーコンテキスト (戻り値をスカラー変数で受け取る状況) の場合は、変換された値のリストの最初の値を返します。 もし EXPR が与えられなかった場合は、$_ が適用されます。

次のコードは、まず、pack を使って 数値 255 から符号なし 16 ビット整数 (リトルエンディアン) としてバイナリデータを生成します。 そして、そのバイナリデータを unpack を使って様々な形式に変換して出力しています。

# 1 つの数値から符号なし 16 ビット整数 (リトルエンディアン) 1 つのバイナリデータを生成
my $data = pack 'S', 255;
print length $data, " bytes\n";    # 2 bytes

# バイナリデータを符号なし 16 ビット整数 (リトルエンディアン) とみなして数値に戻す
my $num = unpack 'S2', $data;
print $num, "\n";                  # 255

# バイナリデータを 16 進数文字列に変換
my $hex = unpack 'H16', $data;
print $hex, "\n";                  # ff00

# バイナリデータを 2 進数文字列に変換
my $bin = unpack 'B16', $data;
print $bin, "\n";                  # 1111111100000000

# バイナリーデータを符号なし 8 ビット整数 2 つに変換
my @nums = unpack 'C2', $data;
print join( ', ', @nums ), "\n";    # 255, 0

TEMPLATE の詳細は、pack の解説をご覧ください。