2017-06-23 31 views
0

文字列のIPv4アドレスを使用して16進整数に変換するプログラムを作成しようとしています。私のプログラムは動作しますが、16進数の値は文字列の形になっていますので、私のプログラムは値の誤りを返します(例: "int()の基数10の無効なリテラル"または "expected type int()or float 」)。PythonのIPv4アドレス16進数

example input: 115.255.8.97 
example output: 73FF0861 


#IPv4 to Hex 
splitip = sys.argv[2].split('.') 
hexint = hex(int(splitip[0]))[2:].zfill(2) + hex(int(splitip[1]))[2:].zfill(2) + hex(int(splitip[2]))[2:].zfill(2) + hex(int(splitip[3]))[2:].zfill(2) 
hexint = hexint.replace('0x','') 

助けていただければ幸いです!

注:私の問題は、hexint変数が文字列であることです。私のプログラムは値adを整数として持つ必要があります。

+0

(https://stackoverflow.com/questions/209513/convert-hex-string-to-int-in-python)[Pythonでintに16進文字列を変換] – tinamou

答えて

0

socket.inet_atonを使用して、ドット付きIPv4アドレスをバイト文字列に変換します。

>>> import socket 
>>> socket.inet_aton('115.255.8.97') 
's\xff\x08a' 

そして、バイナリストリングのヘキサ10進表現を得るためbinascii.hexlifyに値を渡します。

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

の可能性のある重複して出力することができます」 tは文字列です。 –

+0

@GBroad、私はそれを得ることはありません。どういう意味ですか?そのコードを使用して – falsetru

+0

、出力は文字列です。私のプログラムは16進文字列を使うことはできません。私のプログラムで持っている他の16進値は文字列ではなく、私のプログラムで使用できる文字列出力に変換するのに問題があります。 –