2013-11-05 259 views
3

我有以下十六進制地址:2001:0db8:3c4d:0015:0000:0000:abcd:ef12。有8個十六進制數字塊,每個數據塊長16位,總共128位。我想將每個塊轉換爲二進制,也就是說,如果我把第一個塊 - 2001,比我想將其轉換爲二進制,並採取第二塊 - 0db8,將其轉換爲二進制,等等.....將十六進制字符串轉換爲二進制

同樣,我需要遍歷每個塊,將它們轉換爲二進制,然後將它們打包。

任何人都可以告訴我最簡單的方法,我可以實現它嗎?

+2

答案取決於這是否實際上是IPv6地址,在這種情況下,您的示例也可以寫爲「2001:0db8:3c4d:0015 :: abcd:ef12」。但無論如何,這並不難。你知道嗎['pack'H *''](http://perldoc.perl.org/functions/pack.html)? – amon

+0

@amon是的,它是一個IPv6地址 – Prats

+0

@amon請看看編輯 – Prats

回答

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]); 
相關問題