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