技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

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進文字列に変換する。