将十六进制字符串转换为二进制

Pra*_*ats 3 perl unpack pack

我有以下十六进制地址:2001:0db8:3c4d:0015:0000:0000:abcd:ef12.有8个十六进制数字块,每个块长16位,总共128位.我想将这些块中的每一个转换为二进制,即如果我采用第一个块 - 2001,比我想将其转换为二进制而不是第二个块 - 0db8,将其转换为二进制等等.....

同样,我需要迭代每个块,将它们转换为二进制,然后打包它们.

谁能告诉我最简单的方法呢?

jks*_*hah 6

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

输出:

0010000000000001
0000110110111000
0011110001001101
0000000000010101
0000000000000000
0000000000000000
1010101111001101
1110111100010010
Run Code Online (Sandbox Code Playgroud)

编辑

以下行是您的代码中的罪魁祸首.尝试删除它们.

my $tempbin1 = pack( 's', $elements[0]);
my $tempbin2 = pack( 's', $elements[1]);
Run Code Online (Sandbox Code Playgroud)