バイナリーを 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
の解説をご覧ください。