Conversión de Python de cadena binaria a hexadecimal

¿Cómo puedo realizar una conversión de una cadena binaria al valor hexadecimal correspondiente en Python?

Tengo 0000 0100 1000 1101 y quiero obtener 048D Estoy usando Python 2.6.

int da la base 2 y luego el hex :

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

El documento de int :

 int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating 

el argumento del punto se truncará hacia cero (¡esto no incluye una representación de cadena de un número de punto flotante!) Al convertir una cadena, use la base opcional. Es un error proporcionar una base al convertir una no cadena. Si la base es cero, la base adecuada se adivina según el contenido de la cadena. Si el argumento está fuera del rango de enteros, se devolverá un objeto largo.

El documento de hex :

 hex(number) -> string Return the hexadecimal representation of an integer or long 

entero.

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

Usa el módulo Binascii de Python.

 import binascii binFile = open('somebinaryfile.exe','rb') binaryData = binFile.read(8) print binascii.hexlify(binaryData) 

Convertir Binary en hexadecimal sin ignorar los ceros iniciales:

Podría usar la función incorporada format () de esta manera:

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

Usando sin concatenaciones desordenadas y relleno:

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

Dará una representación hexagonal con relleno conservado.

En python3 usando la función hexlify :

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

Te devolveré:

 b'616263313233' 

y puedes obtener la cadena como:

 c.decode('utf-8') 

da:

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

Por la razón que sea que haya tenido problemas con algunas de estas respuestas, he escrito algunas funciones de ayuda para mí mismo, así que si tiene problemas como los que tuve, inténtelo.

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

Parecen funcionar bien.

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

resultados en:

 0xff 0x1234567 0b11010001101011 

Suponiendo que estén agrupados por 4 y separados por espacios en blanco. Esto conserva el 0 principal.

 b = '0000 0100 1000 1101' h = ''.join(hex(int(a, 2))[2:] for a in b.split()) 
 >>> import string >>> s="0000 0100 1000 1101" >>> ''.join([ "%x"%string.atoi(bin,2) for bin in s.split() ] ) '048d' >>> 

o

 >>> s="0000 0100 1000 1101" >>> hex(string.atoi(s.replace(" ",""),2)) '0x48d' 
  x = int(input("press 1 for dec to oct,bin,hex \n press 2 for bin to dec,hex,oct \n press 3 for oct to bin,hex,dec \n press 4 for hex to bin,dec,oct \n")) if x is 1: decimal =int(input('Enter the decimal number: ')) print(bin(decimal),"in binary.") print(oct(decimal),"in octal.") print(hex(decimal),"in hexadecimal.") if x is 2: binary = input("Enter number in Binary Format: "); decimal = int(binary, 2); print(binary,"in Decimal =",decimal); print(binary,"in Hexadecimal =",hex(decimal)); print(binary,"in octal =",oct(decimal)); if x is 3: octal = input("Enter number in Octal Format: "); decimal = int(octal, 8); print(octal,"in Decimal =",decimal); print(octal,"in Hexadecimal =",hex(decimal)); print(octal,"in Binary =",bin(decimal)); if x is 4: hex = input("Enter number in hexa-decimal Format: "); decimal = int(hex, 16); print(hex,"in Decimal =",decimal); print(hex,"in octal =",oct(decimal)); print(hex,"in Binary =",bin(decimal));