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

标签 perl pack unpack

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

同样,我需要遍历每个 block ,将它们转换为二进制文件,然后打包。

谁能告诉我实现它的最简单方法?

最佳答案

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]);

关于perl - 将十六进制字符串转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19783674/

相关文章:

perl - 如何从 Perl 中的二进制文件读取 unsigned int?

Perl 大容量下载直接到文件(以避免 RAM 过载)

perl - 删除文件夹中的所有 *.jpg

c++ - CMFCToolBarComboBoxButton 中的 AddItem - 未显示新值

python - 如何在 PostgreSQL 中将整数解压缩为 float ?

ruby 包和十六进制值

perl - Perl子例程如何报告调用它的行?

python - 如何防止python中两个 Canvas 之间的间隙

qt - 如何解压 QByteArray 中的 32 位整数?

Python:如何通过网络连接传输可变长度数组