ip位址與整數相互轉換

2021-08-13 04:51:26 字數 1602 閱讀 4103

1、ip位址轉成整數

原理:ip位址的每段可以看成是乙個0-255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成整數。

舉例:乙個ip位址為10.0.3.193

每段數字             相對應的二進位制數

10                   00001010

0                    00000000

3                    00000011

193                  11000001

組合起來即為:00001010 00000000 00000011 11000001,轉換為10進製數就是:167773121,即該ip位址轉換後的數字就是它了。

用乘法表示:167773121=10*(256*256*256)+0*(256*256)+3*256+193,其中256=2**8。

我用到了位移操作,因為它就是操作的二進位制數,使用位移操作很方面、直觀。

按位操作符操作的是整數的二進位制數。

[python]

view plain

copy

#將字串形式的ip位址轉成整數型別。

defiptolong(ip_str):  

#print map(int,ip_str.split('.'))

ip_long = 0

forindex,value 

inenumerate(reversed([int(x) 

forx 

inip_str.split(

'.')])):  

ip_long += value<<(8

*index)  

return

ip_long  

2、ip位址的整數型別轉成ip位址

原理:先把這個長整數轉換成乙個32位的二進位制數。從左到右,每8位進行一下分割,就得到4段8位的二進位制數,把這些二進位制數轉換成整數然後加上"."就是這個ip位址了。 

舉例:167773121

二進位制表示形式為:00001010 00000000 00000011 11000001

分割成四段:00001010,00001010,00000011,11000001,分別轉換為整數後加上「.」就得到了10.0.3.193。

為了得到每段的整數,我們可以採用位移操作。如,為了得到00001010的整數表示,我們先向右無符號位移24位,只剩下前八位,轉成整數即可,剩餘的三個也是這樣的原理。**如下:

[python]

view plain

copy

#將ip的整數型別轉成ip字串型別

deflongtoip(ip_long):  

ip_list =   

i_1 = ip_long>>24

i_2 = (ip_long & 0x00ffffff

)>>

16i_3 = (ip_long & 0x0000ffff

)>>

8i_4 = (ip_long & 0x000000ff

)  ip_str = r'.'

.join(map(str,ip_list))  

return

ip_str  

ip位址與整數相互轉換

1 通過string的split方法按.分隔得到4個長度的陣列 2 通過左移位操作 給每一段的數字加權,第一段的權為2的24次方,第二段的權為2的16次方,第三段的權為2的8次方,最後一段的權為1 將十進位制整數形式轉換成127.0.0.1形式的ip位址 1 將整數值進行右移位操作 右移24位,右移...

IP位址與無符號整數值相互轉換

方法1 然後通過unsigned int nresult a 3 24 a 2 16 a 1 8 a 0 得到乙個無符號32位整數。得到4段8位的二進位制數,把這些二進位制數轉換成整數 include include using namespace std unsigned int iptovalu...

ip位址與整數互轉

舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 11000001 組合起來即為 00001010 00000000 00000011 11000001,轉換為10進製數就是 167773121,即該i...