[perl] pack, unpack で 16進文字列を扱うメモ
Perl の中でも関数 pack / unpack が Perl 的でとっつきにくい所だと思うので書いてみました。Ruby, PHP にも同様な関数があるようです。 関数名の覚え方は、pack: バイナリ列に pack する。unpack: バイナリ列を unpack する (文字列・数値など元のデータに戻す)。 16進数文字列を扱うときはフォーマットで必ず 'H' の方を使う。 unpack('H*', "\xF1\xE2") # f1e2 unpack('h*', "\xF1\xE2") # 1f2e (low nibble first 形式: ほとんどの人に必要なし) # 繰り返し数の数え方にも注意:バイト単位ではなく[0-9a-f]の文字単位 unpack('H2', "\xF1\xE2") # f1 unpack('H3', "\xF1\xE2") # f1e # 16進数文字列をpackするとバイナリになる # 'C'は符号無し8bit整数。1バイトで収まるのでエンディアンの区別なし。 unpack('C', pack('H*', '10')) # 16 unpack('C', pack('H*', 'ff')) # 255 数値を扱うときは、符号有り・符号無し・リトルエンディアン・ビッグエンディアンに注意。 公式ドキュメント pack - perldoc.perl.org - 簡潔にまとまった関数ドキュメント perlpacktut - 素晴らしく詳細なpack/unpackチュートリアル 日本語訳 pack - perldoc.jp perlpacktut - perldoc.jp