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.

42
demandé sur Teun Zengerink 2010-01-15 17:47:57

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.

50
répondu Eli Bendersky 2018-08-18 14:04:20
bstr = '0000 0100 1000 1101'.replace(' ', '')
hstr = '%0*X' % ((len(bstr) + 3) // 4, int(bstr, 2))
21
répondu Ignacio Vazquez-Abrams 2010-01-15 15:58:44

Utilisez le module binascii de python

import binascii

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

print binascii.hexlify(binaryData)
12
répondu user3394040 2015-11-09 21:16:24

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))
5
répondu Gareth Williams 2012-08-10 06:13:28

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é

3
répondu Sam Palmer 2013-07-30 11:27:16

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())
0
répondu Tor Valamo 2010-01-15 15:12:59
format(int(bits, 2), '0' + str(len(bits) / 4) + 'x')
0
répondu Dmitry Sobolev 2013-07-14 09:15:45

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
0
répondu onaclov2000 2015-04-03 15:44:37

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'
0
répondu babis21 2018-08-08 10:32:32
 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));
-1
répondu YogVj 2018-08-29 09:50:17
>>> 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'
-3
répondu ghostdog74 2010-01-15 15:42:34