• ベストアンサー

Perlの数値・文字列操作

Perlで以下の16進数の連続した文字列を db444500 配列に入れて後からわかりやすい16進数で表示させたり、 foreach (@list){ print sprintf("%02X ", $_); } 直接文字列として、 0xdb, 0x44, 0x45, 0x00 と表示させるには、どのような書き方をすれば良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

数値として配列に挿入するには: 前から2文字ずつ切り出して、hex関数で数値に変換してあげればいいです。 直接文字列として表示するには: s/([0-9a-f]{2})/0x\1,/g と正規表現を書いて置換します。 0-Fまでの文字2つの前後を"0x"と","で括って置換しています。 $hex = "db444500"; # 数値として配列に挿入 $count = 0; while($count < length($hex)) { push(@list,hex(substr($hex,$count,2))); $count += 2; } foreach (@list){ print sprintf("%02X ", $_); } # 直接文字列として表示 $hex2 = $hex; $hex2 =~ s/([0-9a-f]{2})/0x\1,/g; chop $hex2; # 最後のコンマを削除する print "hex2 = $hex2\n";

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

$hexstrs = "db444500"; @list=unpack("C*", pack("H*",$hexstrs)); foreach (@list){ printf "%02X\n",$_; } #直接表示の意味を勘違いしてたらすみません for($i=0;$i<length($hexstrs);$i+=2){ print "0x". substr($hexstrs, $i, 2) . "\n"; }

関連するQ&A