Comment puis-je convertir une chaîne binaire en valeur hexadécimale correspondante en Python?
J'ai 0000 0100 1000 1101
et je veux obtenir 048D
J'utilise Python 2.6.
int
donnée en base 2 puis hex
:
>>> int('010110', 2)
22
>>> hex(int('010110', 2))
'0x16'
>>>
>>> hex(int('0000010010001101', 2))
'0x48d'
Le doc de 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 de chaîne représentation d'un nombre à virgule flottante!) Lors de la conversion d'une chaîne, utilisation la base optionnelle. C’est une erreur de fournir une base lors de la conversion d’un fichier non-chaîne. Si la base est égale à zéro, la base appropriée est supposée en fonction du. contenu de la chaîne. Si l'argument est en dehors de la plage entière a objet long sera retourné à la place.
Le doc de 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 de binaire en hexadécimal sans ignorer les zéros de tête:
Vous pouvez utiliser la fonction intégrée format () comme ceci:
"{0:0>4X}".format(int("0000010010001101", 2))
En utilisant pas de concaténations désordonnées et de remplissage:
'{:0{width}x}'.format(int(temp,2)), width=4)
Donne une représentation hexadécimale avec un remplissage préservé
Sur python3 en utilisant la fonction hexlify :
import binascii
def bin2hex(str1):
bytes_str = bytes(str1, 'utf-8')
return binascii.hexlify(bytes_str)
a="abc123"
c=bin2hex(a)
c
Vous rendra:
b'616263313233'
et vous pouvez en obtenir la chaîne comme ceci:
c.decode('utf-8')
donne:
'616263313233'
format(int(bits, 2), '0' + str(len(bits) / 4) + 'x')
Pour une raison quelconque, certaines de ces réponses me posaient problème, je suis allée écrire quelques fonctions d'aide pour moi-même. Si vous avez des problèmes comme ceux-là, essayez-les.
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ésulte en:
0xff
0x1234567
0b11010001101011