在上述代码添加:输入2的32次以内的十进制,转为32位二进制,在将二进制每八位转十进制,用“.”隔开,并在窗口输出
时间: 2024-04-16 07:27:03 浏览: 85
十进制转换为二进制,并且以逗号隔开
以下是在之前的代码基础上添加了将输入的2 的 32 次方以内的十进制转换为 32 位二进制,并将每八位二进制转换为十进制,并以标准十进制 IP 地址格式输出的部分:
```python
def decimal_to_binary(decimal):
binary = format(decimal, '032b')
return '.'.join([binary[i:i+8] for i in range(0, 32, 8)])
def binary_to_decimal(binary):
binary_list = binary.split('.')
decimal_list = [str(int(bin_str, 2)) for bin_str in binary_list]
return '.'.join(decimal_list)
def decimal_to_ip(decimal):
ip_parts = []
for i in range(4):
ip_parts.append(str(decimal % 256))
decimal //= 256
ip_parts.reverse()
return '.'.join(ip_parts)
def ip_conversion():
ip = entry.get()
if ip.isdigit(): # 判断IP地址格式
decimal_ip = int(ip)
if decimal_ip > 4294967295: # 2**32-1,判断ip地址是否合法
result_label.config(text="IP地址不合法")
else:
binary_ip = decimal_to_binary(decimal_ip)
ip_address = binary_to_decimal(binary_ip)
result_label.config(text="二进制IP地址是:" + binary_ip + "\n十进制IP地址是:" + ip_address)
else:
ip_list = ip.split(".")
ipgeshi = len(ip_list) # 统计列表中元素个数
if ipgeshi > 3 and ipgeshi < 5: # 判断ip地址是否合法
for v in ip_list:
v1 = int(v)
if v1 > 254: # 判断ip地址是否合法
result_label.config(text="IP地址不合法")
break
else:
for i in range(len(ip_list)):
ele = bin(int(ip_list[i])) # 转二进制
ip_list[i] = ele[2:] # 把0b切掉 得到后面的二进制01内容
if len(ip_list[i]) < 8: # 补全到八位
strl = "0" * (8 - len(ip_list[i])) + ip_list[i]
ip_list[i] = strl
val = "".join(ip_list) # 列表中的所有元素按照空白字符拼接成一个字符串
decimal_ip = int("0b" + val, base=2)
binary_ip = decimal_to_binary(decimal_ip)
result_label.config(text="二进制IP地址是:" + binary_ip + "\n十进制IP地址是:" + decimal_to_ip(decimal_ip))
break
else:
result_label.config(text="IP地址不合法")
```
通过运行这段代码,你可以在窗口中输入一个 IP 地址或者一个 2 的 32 次方以内的十进制数,然后选择转换为二进制 IP 地址或者十进制 IP 地址,并点击转换按钮。程序将会在窗口中显示转换结果。如果输入的内容不合法,则会显示相应的提示信息。
阅读全文