-1

一度に1文字を16進数に変換する次のコードがあります。2文字を16進数に変換したい。つまり、99ab は '99' として扱われ、'ab' は同等の 16 進数に変換されます。

現在の実装は次のとおりです

$final =~ s/(.)/sprintf("0x%X ",ord($1))/eg;
chop($final);

ティア

4

1 に答える 1

2

あなたの質問はあまり意味がありません。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;
于 2013-05-07T02:18:11.227 に答える