ip位址與整數互轉

2021-09-27 07:22:39 字數 1128 閱讀 3234

舉例:乙個ip位址為10.0.3.193

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

10                   00001010

0                     00000000

3                     00000011

193                 11000001

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

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

def ip2num(ip):

res = 0

ip = list(map(int,ip.split('.')))

# 注意先左移,在去異或

for num in ip:

res = res << 8

res = res^num

return res

print(ip2num('10.0.3.193'))

舉例:167773121

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

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

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

def num2ip(num):

i_1 = num >> 24

i_2 = (num & 0x00ffffff) >> 16

i_3 = (num & 0x0000ffff) >> 8

i_4 = num & 0x000000ff

ip = [i_1,i_2,i_3,i_4]

ip = list(map(str,ip))

return '.'.join(ip)

print(num2ip(167773121))

ip位址與整數相互轉換

1 ip位址轉成整數 原理 ip位址的每段可以看成是乙個0 255的整數,把每段拆分成乙個二進位制形式組合起來,然後把這個二進位制數轉變成整數。舉例 乙個ip位址為10.0.3.193 每段數字 相對應的二進位制數 10 00001010 0 00000000 3 00000011 193 1100...

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...