免責事項:私はperlを行って以来、年を重ねています。Perl変数をバイト/ビットで表示
perl変数のバイト/ビット表現を表示できますか?それ私が(と思う?)コンピュータが
0b1100010
のようなものとして$foo
を見て何か
my $foo = 'a';
のように私は知っていると言うならば、のバイナリ表現をプリントアウトするためのperlを取得する方法がありますされます変数?
unpackを使用して、
免責事項:私はperlを行って以来、年を重ねています。Perl変数をバイト/ビットで表示
perl変数のバイト/ビット表現を表示できますか?それ私が(と思う?)コンピュータが
0b1100010
のようなものとして$foo
を見て何か
my $foo = 'a';
のように私は知っていると言うならば、のバイナリ表現をプリントアウトするためのperlを取得する方法がありますされます変数?
unpackを使用して、
確かに(単に古い友人の周りいじり、より深く、私は1997年にやったよりも、それを理解しようとすると、任意の実用的な目的のために求めていない):
print unpack "B*", $foo;
例: packとperlpacktutため
% perl -e 'print unpack "B*", "bar";'
011000100110000101110010
はperldocページが異なるRとの間の変換についての素敵な概観を与えます陳述。
実際の内部構造が必要な場合は、 "perlguts"というドキュメントがあります。どちらのperldoc perlguts
は、ここでそれを読むか:あなたはバイナリにその値を表示するには、%b
形式で数字の値、およびprintf
を返すためにord
を使用することができますhttp://perldoc.perl.org/perlguts.html
興味深い質問がありますが、私はDevel :: Peek –
。
print "%08b\n”, ord 'a'
出力
01100010
アンディはあなたの質問を解釈する方法を見た後、私はDevel::Peekは、変数の内部表現を表示することができDump
機能を持っていると言ってフォローアップすることができます。バイナリレベルにはなりませんが、興味のあるものが内部であれば、これを見ることができます。
$ perl -MDevel::Peek -e 'my $foo="a";Dump $foo';
SV = PV(0x7fa8a3004e78) at 0x7fa8a3031150
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x7fa8a2c06190 "a"\0
CUR = 1
LEN = 16
$ perl -MDevel::Peek -e 'my %bar=(x=>"y",a=>"b");Dump \%bar'
SV = IV(0x7fbc5182d6e8) at 0x7fbc5182d6f0
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x7fbc51831168
SV = PVHV(0x7fbc5180c268) at 0x7fbc51831168
REFCNT = 2
FLAGS = (PADMY,SHAREKEYS)
ARRAY = 0x7fbc5140f9f0 (0:6, 1:2)
hash quality = 125.0%
KEYS = 2
FILL = 2
MAX = 7
RITER = -1
EITER = 0x0
Elt "a" HASH = 0xca2e9442
SV = PV(0x7fbc51804f78) at 0x7fbc51807340
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x7fbc5140fa60 "b"\0
CUR = 1
LEN = 16
Elt "x" HASH = 0x9303a5e5
SV = PV(0x7fbc51804e78) at 0x7fbc518070d0
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x7fbc514061a0 "y"\0
CUR = 1
LEN = 16
そして、もう一つの方法:
printf "%v08b\n", 'abc';
出力:
01100001.01100010.0110001
(Vフラグはperlの専用のprintf/sprintfの機能であり、またb
以外の数値書式で動作します。
これは、0より大きい文字がある解凍の提案とは異なります:私はちょうどバイナリ変換にボックスASCII外有する2017 perlで、実現
$ perl -we'printf "%vX\n", "\cA\13P\x{1337}"'
1.B.50.1337
:のみ(警告)8つの下位ビットが返される解凍、
printf '%v...'
は、すべてのビットを表示します。すっきり!私はそれを持っている別の言語を知らない。 – Dmitry