どうも perl の pack(), unpack() がいつまでたっても身につかない。
初歩的すぎる話題だけどいつもなんだかんだで調べちゃう。だから恥ず
かしいけどここにメモっておく。
例えば Hex の "5a" なんてのは "Z" だけどこの変換を行うには以下。
$bstr = pack("H*", "5a");
第二引数が Hex だよんてことを第一引数で定義してる。第一引数の
種類はリファレンスで調べて。この部分の *は後に続く文字列の数
でもよい(*は最後までという意味) 。例えば上記の場合 "H1" なん
てしちゃうと、はじめの "5" だけをバイナリ変換しちゃうので 0x50
のバイナリ表現が $bstr にはいっちゃう("P"という文字だけど)。
で、unpack はその逆で、バイナリ文字列を Hex 表現等にしたりする。
だから上記の結果の $bstr を unpack("H*", $bstr) なんてすると、
"Z" の Hex 表現の "5a" が得られる。
ちなみになんで pack とか unpack の話題だったのかというと、slappasswd
で得られるパスワードを base16 にしたかったのです。
この場合は、slappasswd で得られる文字列は base64 なのでこれを
デコードしてバイナリ化、んでそれを unpack("H*", )すれば base16
な表現が得られるというわけ。
0 件のコメント:
コメントを投稿