pack関数とunpack関数の基本を理解する
一般的に、packは包み込むことで、unpackはその逆です。
Perlでのpack関数は、リスト値を型指定で包み込んで、バイナリ値に変換します。unpack関数はその逆です。
バイナリ値とは、たとえば、見た目『123』は、内部的には16進の『313233』で、バイナリ値です。
つぎに、リスト値『313233』を16進上位ニブル型指定("H*")でパックしてみます。
すると、見た目バイナリ値が『123』になるのです。
print pack("H*", 313233); #内部的には16進の『313233』である見た目バイナリ値『123』が表示される
つぎに、見た目バイナリ値『123』を16進上位ニブル型指定("H*")でアンパックしてみます。
すると、リスト値『313233』が表示されます。
print unpack("H*", 123); #リスト値『313233』が表示される
尚、16進上位ニブル型指定("H*")とは、16進数で左から4ビットずつ変換すること。
ちなにみ、ニブルとは、4ビットのことで、8ビットをバイトと呼ぶのと同じ感じです。
別の例として、符号なしchar型指定("C*")で『65,66,67』のリストをパックしてみます。
すると、見た目バイナリ値『ABC』が表示されます。
print pack("C*", 65,66,67); # 見た目バイナリ値『ABC』が表示される
見た目バイナリ値『ABC』をアンパックすると元のリストが求められる。
@aaa = unpack("C*", pack("C*", 65,66,67)); print $aaa[0], "\n"; # リスト値『65』が表示される print $aaa[1], "\n"; # リスト値『66』が表示される print $aaa[2], "\n"; # リスト値『67』が表示される