data - Conversión de Python de cadena binaria a hexadecimal
convertir binario a ascii python (11)
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))
¿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.
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''
Por la razón que sea que haya tenido problemas con algunas de estas respuestas, escribí un par de funciones de ayuda para mí, 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))
Parece que funcionan 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())
Usa el módulo Binascii de Python.
import binascii
binFile = open(''somebinaryfile.exe'',''rb'')
binaryData = binFile.read(8)
print binascii.hexlify(binaryData)
Usando sin concatenaciones desordenadas y relleno:
''{:0{width}x}''.format(int(temp,2)), width=4)
Dará una representación hexagonal con relleno conservado.
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 en función del 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.
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));
bstr = ''0000 0100 1000 1101''.replace('' '', '''')
hstr = ''%0*X'' % ((len(bstr) + 3) // 4, int(bstr, 2))
format(int(bits, 2), ''0'' + str(len(bits) / 4) + ''x'')
>>> 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''