整數與IP位址間的轉換

2021-10-18 13:24:17 字數 1640 閱讀 7244

題目:

乙個長整數。

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

10 00001010

0 00000000

3 00000011

193 11000001

本題含有多組輸入用例,每組用例需要你將乙個ip位址轉換為整數、將乙個整數轉換為ip位址

**:

while true :

try:

#str1 = '10.0.3.193'.split('.')

str1 = input().split('.') #輸入ip位址,並用'.'進行分割

str2 = str(bin(int(input()))).split('b')[-1] #輸入轉換後的ip位址,將其轉換成二進位制

list1 =

for i in str1: #將每一段ip位址中的數字轉換成二進位制

erjizhi = str(bin(int(i))).split('b')[-1]

#print(erjizhi)

if len(erjizhi) <= 8: #判斷每乙個二進位制字長是否為8,小於8的話用0進行填充

erjizhi = '0' * (8 - len(erjizhi)) + erjizhi

#print(erjizhi)

#print(''.join(list1))

print(int(''.join(list1),2)) #對lsit1中的元素進行拼接

dic1 = {} #生成乙個空字典

#print(str2)

# str1 = '1010000000110000001111000001'

if len(str2) < 32: #判斷轉換後的ip位址轉換成二進位制後,字長是否小於32, 因為有效個的ip分為4段,每一段轉換為8位的二進位制的話,最大是8*4=32位元組長

str2 = '0' * (32 - len(str2)) + str2 #不滿足的話用0進行填充,就得到了32字長的二進位制數字

#print(str2)

len1 = int(len(str2) / 8) #把32字長的二進位制數字進行切割,使其每一段長度為8,分割成4分。

# print(len1)

# print(type(len1))

for i in range(0, len1):

dic1[i] = str2[8 * (i):8 * (i + 1)]

# print(dic1)

# print(int('11000001', 2))

for key in dic1.keys(): #將分割的4段二進位制存在dic1字典中,並轉換成10進製。

dic1[key] = int(dic1[key], 2)

#print(dic1)

res =

for value in dic1.values(): #將轉換成4段十進位制的數字新增到res列表中去

print('.'.join(res)) #使用「.」對4個二進位制熟悉進行拼接,並列印出來

except:

break

整數與ip位址間的轉換

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

整數與IP位址間的轉換

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

C C 整數與IP位址間的轉換

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