2010-12-04 29 views
2

サポート「%02X」などの形式のcコードを使用して、16進数の生データを印刷しました。私のようないくつかの形式以下にそれらをデコードしたいperl:16進データを整数、文字列にデコードする方法は?

\x00\x20\x00\x10\xfd\x02\x10\x00\x00\x00\x00\x20\xff\x02\x10\x00\x00\x00\x00\x00 \x05\x00\x011\x00\x01\x00\n\x00\x0240


ので、彼らは次のようになり
最初の2つのバイトの16進「\ X00 \ X20」USHORTにデコードする必要があります。次
2つのB hex "\ x00 \ x10"をushortにデコードする必要があります。
次の8B 16進数「\ xfd \ x02 \ x10 \ x00 \ x00 \ x00 \ x00 \ x20」は64ビットにコーディングする必要があります。
"\ xff \ x02 \ x10 \ x00 \ x00 \ x00 \ x00" \ x00 "という8B 16進数は64ビットにコーディングする必要があります。
以下の3バイト16進数は3文字にデコードする必要があります。
....

がどのように私はperlの
の復号を実装するのです(16進数をプリントアウトするかを各進の間にバックスラッシュがあるなぜところで、私は理解していない、それはありますか)?

答えて

1

s{\\x(..)}{chr hex $1}eg; 1バイトです。 またはunpack("v", "\x00\x20");(詳細については、アンパック機能を参照してください)。

+0

#!/ usr/bin/perl -w $ _ = "\ x61 \ x62"; {\\ x(..)} {chr hex $ 1}例: print "approach1:$ _ \ n"; $ str2 = unpack( "v"、 "\ x61 \ x62"); print "approach2:$ str2 \ n"; – user389955

+0

答えは:bash-3.00#./hex2str.pl アプローチ1:ab アプローチ2:25185 – user389955

+0

確かに。それは、あなたがどのアプローチを使用したいかによってまったく異なります。ある日あなたはushort( "shorts"を持たないPerlの短さ - "\ x61 \ x62"は文字列、 "ab"は別の文字列、25185は通常はintの容量です)ですので、アプローチ2を使用してください;もう一方は "hex2str"と言うので、アプローチ1を使用してください。 – user502515

0
  1. デコードデータ:
    • s/\\x(..)/chr hex $1/eg/;
    • がベターはまだ、あなたが入力を生成Cコードを管理していると仮定すると、最初の場所に出力のバイナリデータにそれを取得し、完全にこのステップを避けます。
  2. コンポーネントをデコードするためにunpackを使用してください。
関連する問題