it-swarm.com.de

Python-Konvertierung von binärer Zeichenfolge in Hexadezimalzahl

Wie kann ich eine Konvertierung einer binären Zeichenfolge in den entsprechenden Hex-Wert in Python durchführen?

Ich habe 0000 0100 1000 1101 und ich möchte 048D verwenden. Ich verwende Python 2.6.

43
sylvain

int gegebene Basis 2 und dann hex:

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

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

Das Dokument von int:

int(x[, base]) -> integer

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

punkt Das Argument wird gegen Null abgeschnitten (dies schließt keine Zeichenfolge einer Gleitkommazahl ein!). Beim Konvertieren einer Zeichenfolge benutzen die optionale Basis. Es ist ein Fehler, eine Basis anzugeben, wenn eine .__ konvertiert wird. keine Zeichenfolge Wenn die Basis Null ist, wird die richtige Basis auf der Grundlage von .__ geschätzt. String-Inhalt Wenn das Argument außerhalb des ganzzahligen Bereichs liegt, a Langes Objekt wird stattdessen zurückgegeben.

Das Dokument von hex:

hex(number) -> string

Return the hexadecimal representation of an integer or long

ganze Zahl.

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

Verwenden Sie das binascii-Modul von python

import binascii

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

print binascii.hexlify(binaryData)
12
user3394040

Umwandlung von Binary in Hex ohne Ignorieren der führenden Nullen:

Sie können die eingebaute Funktion format () folgendermaßen verwenden:

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

Verwenden Sie keine unordentlichen Verkettungen und Auffüllen:

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

Wird eine Hex-Darstellung mit beibehaltener Polsterung geben

3
Sam Palmer

Auf python3 mit der Funktion hexlify :

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

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

Gibt dir zurück:

b'616263313233'

und Sie können die Zeichenfolge davon erhalten:

c.decode('utf-8')

gibt:

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

Aus irgendeinem Grund hatte ich Probleme mit einigen dieser Antworten. Ich habe ein paar Hilfsfunktionen für mich geschrieben. Wenn Sie also Probleme wie ich haben, probieren Sie es aus.

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))

Sie scheinen gut zu funktionieren.

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

ergebnisse in:

0xff
0x1234567
0b11010001101011
0
onaclov2000