2014-01-06 4 views
6

IP를 16 진수로 변환하는 스크립트를 작성하고 있습니다. 다음은 내 스크립트입니다IP를 16 진수로 변환합니다.

import string 
ip = raw_input('Enter IP') 
a = ip.split('.') 
b = hex(int(a[0])) + hex(int(a[1])) + hex(int(a[2])) + hex(int(a[3])) 
b = b.replace('0x', '') 
b = b.upper() 
print b 

내 문제는 115.255.8.97 같은 IP, 나는이 무엇입니까이다 :

대답 예정 : 73FF861

을 Ans By의 예상 : 73FF0861

수있는 사람을 내가하고있는 실수를 말해 줄 정도로 영리하다.

답변

12

hex 기능 앞에 0이 붙지 않습니다.

>>> hex(8).replace('0x', '') 
'8' 

사용 str.format02X 형식 사양 :

>>> '{:02X}'.format(8) 
'08' 
>>> '{:02X}'.format(100) 
'64' 

>>> a = '115.255.8.97'.split('.') 
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*map(int, a)) 
'73FF0861' 

또는 당신이 사용할 수있는 binascii.hexlify + socket.inet_aton :

>>> import binascii 
>>> import socket 
>>> binascii.hexlify(socket.inet_aton('115.255.8.97')) 
'73ff0861' 
>>> binascii.hexlify(socket.inet_aton('115.255.8.97')).upper() 
'73FF0861' 
+0

이것은 매우 좋게 보입니다. raw_input()에 입력으로 둘 이상의 라인을 입력 할 수있는 메소드가 있습니까? – user2922822

+0

@ user2922822, 모든 줄을 얻기 위해'sys.stdin'을 반복 할 수 있습니다. 또는'raw_input()'을 반복합니다. – falsetru

1

진수 돈부터 ' t는 당신이 우리 ('0X'을 제거) 만 [2:]으로 16 진수를 복용하고 필요한 경우 우리는이 앞에 0 만 추가 zfill(2)

import string 
ip = raw_input('Enter IP') 
a = ip.split('.') 
b = hex(int(a[0]))[2:].zfill(2) + hex(int(a[1]))[2:].zfill(2) + hex(int(a[2]))[2:].zfill(2) + hex(int(a[3]))[2:].zfill(2) 
b = b.replace('0x', '') 
b = b.upper() 
print b 

을 사용할 수 앞에 0을 선도하고 있습니다.

예 출력 :

Enter IP 192.168.2.1 
C0A80201 

예 출력 :

Enter IP 115.255.8.97 
73FF0861 

EDIT1 :

@volcano 요청에 의해 당신이 지능형리스트로 대체 할 수

b = "".join([hex(int(value))[2:].zfill(2) for value in a]) 
+0

와우,이 모든 내용을 입력했습니다.> 몇 가지 목록 이해력은 어떻습니까? – volcano

+0

@volcano 의견을 수락했습니다. 답변이 수정되었습니다. –

-1
>>>import binascii 
>>>import socket 
>>>binascii.hexlify(socket.inet_aton('115.255.8.97')) 
'73ff0861' 
>>>binascii.hexlify(socket.inet_aton('10.255.8.97')) 
'0aff0861' 

위의 IP ~ 16 진수 변환 출력에서 ​​출력이 '0'으로 시작하는 경우 ex. 0aff0861 그런 다음 0을 삭제하고 출력을 aff0861과 같이 표시해야합니다. 변환에 직접 사용할 수있는 방법이 있습니까?

+0

질문에 댓글을 달아주세요. 문제는 답을 질문하는 것이 독자에게 오도하는 것입니다. (적어도 나는 오도했습니다;) – tssch

0
import socket, struct 

# Convert a hex to IP 
def hex2ip(hex_ip): 
    addr_long = int(hex_ip,16) 
    hex(addr_long) 
    hex_ip = socket.inet_ntoa(struct.pack(">L", addr_long)) 
    return hex_ip 

# Convert IP to bin 
def ip2bin(ip): 
    ip1 = '.'.join([bin(int(x)+256)[3:] for x in ip.split('.')]) 
    return ip1 

# Convert IP to hex 
def ip2hex(ip): 
    ip1 = '-'.join([hex(int(x)+256)[3:] for x in ip.split('.')]) 
    return ip1 

print hex2ip("c0a80100") 
print ip2bin("192.168.1.0") 
print ip2hex("192.168.1.0") 
+2

맨손으로 답변하지 마십시오. 또한 코드가 수행하는 작업에 대한 설명을 제공하십시오. –

+0

hex2ip (hex_ip)는 16 진수를 IP로 변환하고, ip2bin (ip)는 IP를 bin으로 변환하고, ip2hex (ip)는 IP를 16 진수로 변환합니다. – user2968981