ITエンジニアの技術メモ

神奈川在住のITエンジニアの備忘録です。主にプログラミング(Perl, Java など)やネットワーク技術について、仕事などを通じて学んだことを自分の中で整理するためにゆるゆると書いています。誰かのご参考になれば幸いです。

sprintf関数とunpack関数

sprintf関数とunpack関数は、ともに引数の数値を16進表記に変換できるが、以下の挙動の違いがある。

use strict;
use warnings;

my $num = 12;

my $hexdumpBySprintf = sprintf("%x", $num);
my $hexdumpByUnpack = unpack("H*", $num);

print "hexdump by sprintf: $hexdumpBySprintf\n"; # c
print "hexdump by unpack: $hexdumpByUnpack\n";   # 3121

上記を実行すると、結果は以下になる。

hexdump by sprintf: c
hexdump by unpack: 3132


つまり、sprintf関数の方は、引数の 12 を数値として扱い、対応する16進文字に変換する。一方、unpack関数の方は、引数の 12 を文字として扱い、対応する16進文字列に変換する。