一度に1文字を16進数に変換する次のコードがあります。2文字を16進数に変換したい。つまり、99ab は '99' として扱われ、'ab' は同等の 16 進数に変換されます。
現在の実装は次のとおりです
$final =~ s/(.)/sprintf("0x%X ",ord($1))/eg;
chop($final);
ティア
あなたの質問はあまり意味がありません。Hex は数値の文字列表現です。文字列を 16 進数に変換することはできません。
文字は単なる数字であるため、文字列の個々の文字を16進数に変換できますが、それは明らかにあなたが望むものではありません. (それがあなたのコードが行うことです。)
16進数から文字に変換しようとしていると思います。
6 chars "6a6b0a" ⇒ 3 chars "\x6a\x6b\x0a"
もしそうなら、あなたはあなたの選択を使用することができます
$final =~ s/(..)/ chr(hex($1)) /seg;
また
$final = pack 'H*', $final;
私が考えることができる他の可能性は、16 ビット整数をアンパックしたいということです。
6 chars "6a6b" ⇒ 13 chars "0x6136 0x6236" (LE byte order)
-or-
6 chars "6a6b" ⇒ 13 chars "0x3661 0x3662" (BE byte order)
もしそうなら、あなたは使用することができます
my @nums = unpack 'S<*', $packed; # For 16-bit ints, LE byte order
-or-
my @nums = unpack 'S>*', $packed; # For 16-bit ints, BE byte order
my $final = join ' ', map sprintf('0x%04X', $_), @nums;