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

Posted

技术标签:

【中文标题】将十六进制字符串转换为二进制【英文标题】:Converting hexadecimal string to binary 【发布时间】:2013-11-05 07:20:35 【问题描述】:

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

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

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

【问题讨论】:

答案取决于这是否真的是一个 IPv6 地址,在这种情况下,您的示例也可以写为2001:0db8:3c4d:0015::abcd:ef12。但无论哪种方式,这都不难做到。你知道pack 'H*'吗? @amon 是的,它是一个 IPv6 地址 @amon 请看一下编辑 【参考方案1】:
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]);

【讨论】:

以上是关于将十六进制字符串转换为二进制的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程(将十六进制字符串转换为十进制整数 )

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

如何将十六进制字符串转换为十六进制数字

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

java中如何将字符串转换为二进制数

16进制字符串如何转化16进制数值