3

次の 16 進アドレスがあります: 2001:0db8:3c4d:0015:0000:0000:abcd:ef12。16 進数の 8 つのブロックがあり、各ブロックの長さは 16 ビット、合計 128 ビットです。これらの各ブロックをバイナリに変換したい、つまり、最初のブロック - 2001 をバイナリに変換したい場合、2 番目のブロック - 0db8 をバイナリに変換したいなど....

同様に、各ブロックを反復処理し、バイナリに変換してからパックする必要があります。

それを達成できる最も簡単な方法を誰か教えてもらえますか?

4

1 に答える 1

6
my $str = '2001:0db8:3c4d:0015:0000:0000:abcd:ef12';
print  join "\n", map { unpack ('B*', pack ('H*',$_)) } split ':', $str;

出力:

0010000000000001
0000110110111000
0011110001001101
0000000000010101
0000000000000000
0000000000000000
1010101111001101
1110111100010010

編集

次の行は、コードの原因です。それらを削除してみてください。

my $tempbin1 = pack( 's', $elements[0]);
my $tempbin2 = pack( 's', $elements[1]);
于 2013-11-05T09:22:01.403 に答える