Conversion Python de chaîne binaire en hexadécimal
Comment puis-je effectuer une conversion d'une chaîne binaire correspondant à la valeur hexadécimale en Python?
j'ai 0000 0100 1000 1101
et je veux obtenir 048D
J'utilise Python 2.6.
11 réponses
int
donné la base 2 et puis hex
:
>>> int('010110', 2)
22
>>> hex(int('010110', 2))
'0x16'
>>>
>>> hex(int('0000010010001101', 2))
'0x48d'
La doc int
:
int(x[, base]) -> integer Convert a string or number to an integer, if possible. A floating
point l'argument sera tronqué vers zéro (cela n'inclut pas une chaîne représentation d'un nombre en virgule flottante!) Lors de la conversion d'une chaîne de caractères, utiliser la base optionnelle. C'est une erreur que de fournir une base lors de la conversion d'un chaîne non. Si la base est zéro, la base appropriée est estimée sur la base chaîne de contenu. Si l'argument est en dehors de la plage entière a longtemps objet sera retournée à la place.
La doc hex
:
hex(number) -> string Return the hexadecimal representation of an integer or long
entier.
bstr = '0000 0100 1000 1101'.replace(' ', '')
hstr = '%0*X' % ((len(bstr) + 3) // 4, int(bstr, 2))
Utilisez le module binascii de python
import binascii
binFile = open('somebinaryfile.exe','rb')
binaryData = binFile.read(8)
print binascii.hexlify(binaryData)
conversion binaire en hex sans ignorer les zéros principaux:
Vous pouvez utiliser la fonction intégrée de format () comme ceci:
"{0:0>4X}".format(int("0000010010001101", 2))
n'Utilisant pas de désordre concaténations et rembourrage :
'{:0{width}x}'.format(int(temp,2)), width=4)
donnera une représentation hexadécimale avec un rembourrage préservé
en Supposant qu'ils sont groupés par 4 et séparés par des espaces. Cela préserve le 0 de tête.
b = '0000 0100 1000 1101'
h = ''.join(hex(int(a, 2))[2:] for a in b.split())
quelle que soit la raison pour laquelle j'ai eu des problèmes avec certaines de ces réponses, je suis allé écrire quelques fonctions d'aide pour moi-même, donc si vous avez des problèmes comme je l'ai fait, donnez-leur un essai.
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))
Ils semblent bien fonctionner.
print hex_string_to_hex_value("FF")
print hex_string_to_hex_value("01234567")
print bin_string_to_bin_value("11010001101011")
résultat:
0xff
0x1234567
0b11010001101011
sur python3 en utilisant le hexlify fonction:
import binascii
def bin2hex(str1):
bytes_str = bytes(str1, 'utf-8')
return binascii.hexlify(bytes_str)
a="abc123"
c=bin2hex(a)
c
Va vous donner de retour:
b'616263313233'
et vous pouvez obtenir la chaîne de caractères de la forme:
c.decode('utf-8')
donne:
'616263313233'
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));
>>> import string
>>> s="0000 0100 1000 1101"
>>> ''.join([ "%x"%string.atoi(bin,2) for bin in s.split() ] )
'048d'
>>>
ou
>>> s="0000 0100 1000 1101"
>>> hex(string.atoi(s.replace(" ",""),2))
'0x48d'