web-dev-qa-db-ja.com

Pythonバイナリ文字列から16進数への変換

Pythonでバイナリ文字列を対応する16進値に変換するにはどうすればよいですか?

私は持っています 0000 0100 1000 1101と私は048D私はPython 2.6。

47
sylvain

int与えられた基数2、次にhex

>>> int('010110', 2)
22
>>> hex(int('010110', 2))
'0x16'
>>> 

>>> hex(int('0000010010001101', 2))
'0x48d'

intのドキュメント:

int(x[, base]) -> integer

Convert a string or number to an integer, if possible.  A floating

ポイント引数はゼロに向かって切り捨てられます(これには浮動小数点数の文字列表現は含まれません!)文字列を変換するときは、オプションのベースを使用します。文字列以外を変換するときにベースを指定するとエラーになります。 baseがゼロの場合、文字列の内容に基づいて適切なベースが推測されます。引数が整数範囲外の場合、代わりに長いオブジェクトが返されます。

hexのドキュメント:

hex(number) -> string

Return the hexadecimal representation of an integer or long

整数。

57
Eli Bendersky
bstr = '0000 0100 1000 1101'.replace(' ', '')
hstr = '%0*X' % ((len(bstr) + 3) // 4, int(bstr, 2))

Pythonのbinasciiモジュールを使用する

import binascii

binFile = open('somebinaryfile.exe','rb')
binaryData = binFile.read(8)

print binascii.hexlify(binaryData)
14
user3394040

先行ゼロを無視せずにバイナリを16進数に変換します。

次のようなformat()組み込み関数を使用できます。

"{0:0>4X}".format(int("0000010010001101", 2))
6
Gareth Williams

乱雑な連結とパディングを使用しない:

'{:0{width}x}'.format(int(temp,2)), width=4)

パディングが保存された状態で16進表現を提供します

3
Sam Palmer

hexlify 関数を使用するpython3の場合:

import binascii
def bin2hex(str1):
    bytes_str = bytes(str1, 'utf-8')
    return binascii.hexlify(bytes_str)

a="abc123"
c=bin2hex(a)
c

お返しします:

b'616263313233'

そして、次のような文字列を取得できます:

c.decode('utf-8')

与える:

'616263313233'
1
babis21
format(int(bits, 2), '0' + str(len(bits) / 4) + 'x')
0
Dmitry Sobolev

何らかの理由でこれらの回答のいくつかに問題があった場合、私はいくつかのヘルパー関数を自分用に作成しましたので、あなたが私のような問題を抱えているなら、これらを試してみてください。

def bin_string_to_bin_value(input):
   highest_order = len(input) - 1
   result = 0
   for bit in input:
      result = result + int(bit) * pow(2,highest_order)
      highest_order = highest_order - 1
   return bin(result)

def hex_string_to_bin_string(input):
   lookup = {"0" : "0000", "1" : "0001", "2" : "0010", "3" : "0011", "4" : "0100", "5" : "0101", "6" : "0110", "7" : "0111", "8" : "1000", "9" : "1001", "A" : "1010", "B" : "1011", "C" : "1100", "D" : "1101", "E" : "1110", "F" : "1111"}
   result = ""
   for byte in input:
      result =  result + lookup[byte]
   return result
def hex_string_to_hex_value(input):
   bin_string = hex_string_to_bin_string(input)
   bin_value = bin_string_to_bin_value(bin_string)
   return hex(int(bin_value, 2))

彼らはうまくいくようです。

print hex_string_to_hex_value("FF")
print hex_string_to_hex_value("01234567")
print bin_string_to_bin_value("11010001101011")

結果:

0xff
0x1234567
0b11010001101011
0
onaclov2000