将ip转换为二进制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将ip转换为二进制相关的知识,希望对你有一定的参考价值。
我试图将4个输入的IP地址八位字节转换为二进制形式。这只是将第一个八位字节转换为8位形式的代码的一部分。 'oc'是八位字节 - 当我开始工作时,我将修复变量名称。
remainder = 0
bits = (128,64,32,16,8,4,2,1)
binary = [0,0,0,0,0,0,0,0]
oc = int(input("Enter oc1: "))
if oc > 256:
print("Only 256 or less")
if oc > bits[0] or oc == bits[0]:
binary[0] = 1
remainder = remainder + oc - bits[0]
print(binary)
print(remainder)
elif oc < bits[0]:
binary[0] = 0
print(binary)
if remainder > bits[1] or remainder == bits[1]:
binary[1] = 1
remainder = remainder - bits[1]
print(binary)
print(remainder)
elif oc < bits[1]:
binary[1] = 0
print(binary)
if remainder > bits[2] or oc == bits[2]:
binary[2] = 1
remainder = remainder - bits[2]
print(binary)
print(remainder)
elif oc < bits[2]:
binary[2] = 0
print(binary)
当我输入128或更大的八位字节时,我得到一个成功的输出。
例如:输入'192'将显示'1,1,0,0,0,0,0,0'但是低于128的任何值并且输出全部为零。
我相信,我也可以使用循环,但不知道如何。
答案
这对你有用吗?
oc = int(input("Enter oc1: "))
if oc > 256:
print("Only 256 or less")
else:
binary = bin(oc)[2:]
bin()将一个整数转换为二进制,并使用[2:]附加项删除前导的'0b',否则你会获得。
如果要确保有8个字符,前导零,则可以使用zfill()。作为另一个附属物,zfill(n)将添加前导零,直到你的字符串长n个字符。
binary = bin(oc)[2:].zfill(8)
另一答案
将IPv4地址转换为二进制:
ip=raw_input("Enter the ip address
") #input the ipv4 address
ips=ip.split('.') #split by '.'
for i in ips: #ips is a list of octets,
##we parse through the list to convert each of these to binary
print(format(int(i),'08b')) #Use format '08b' to add leading '0' to form '8' digits of binary 'b'
输入:
192.95.01.56
输出:
11000000
01011111
00000001
00111000
另一答案
@Tom给出的解决方案似乎是最合适的。但是,如果你想要将十进制转换为二进制的基础学校数学,一个解决方案是这个。
import sys
string = "127.0.0.1"
oc = string.split(".")
for i in range(0, 4) :
num = int(oc[i])
j = 0;
remlist = []
while num > 0 :
rem = num % 2
j = j + 1
remlist.append(rem)
num = num / 2
for x in range(j, 8) :
remlist.append(0)
for element in reversed(remlist) :
print element,
if i < 3 :
print ".",
以上是关于将ip转换为二进制的主要内容,如果未能解决你的问题,请参考以下文章