Python-conversie van binaire tekenreeks naar hexadecimaal

Hoe kan ik een conversie uitvoeren van een binaire string naar de corresponderende hex-waarde in Python?

Ik heb 0000 0100 1000 1101en ik wil 048Dkrijgen. Ik gebruik Python 2.6.


Antwoord 1, autoriteit 100%

intgegeven grondtal 2 en vervolgens hex:

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

Het document van int:

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

punt
argument wordt afgekapt richting nul (dit bevat geen string
weergave van een getal met drijvende komma!) Bij het converteren van een string,
gebruik maken van
de optionele basis. Het is een fout om een grondtal op te geven bij het converteren van a
niet-string. Als grondtal nul is, wordt het juiste grondtal geraden op basis van de
tekenreeks inhoud. Als het argument buiten het gehele bereik a . ligt
lang object wordt in plaats daarvan geretourneerd.

Het document van hex:

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

geheel getal.


Antwoord 2, autoriteit 40%

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

Antwoord 3, autoriteit 29%

Gebruik de binascii-module van Python

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

Antwoord 4, autoriteit 8%

Binair getal omzetten in hex zonder voorloopnullen te negeren:

Je zou de ingebouwde functie format() als volgt kunnen gebruiken:

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

Antwoord 5, autoriteit 5%

Geen rommelige aaneenschakelingen en opvulling gebruiken:

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

Geeft een hexadecimale weergave met behoud van opvulling


Antwoord 6, autoriteit 4%

Op python3 met behulp van de hexlify-functie:

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

Zal je teruggeven:

b'616263313233'

en je kunt de string ervan krijgen als:

c.decode('utf-8')

geeft:

'616263313233'

Antwoord 7, autoriteit 4%

Dit overzicht kan nuttig zijn voor iemand: bin, dec, hex in pythonom te converteren tussen bin, dec, hex in python.

Ik zou doen:

dec_str = format(int('0000010010001101', 2),'x')
dec_str.rjust(4,'0')

Resultaat: ‘048d’


Antwoord 8

Ervan uitgaande dat ze zijn gegroepeerd op 4 en gescheiden door witruimte. Hierdoor blijft de eerste 0 behouden.

b = '0000 0100 1000 1101'
h = ''.join(hex(int(a, 2))[2:] for a in b.split())

Antwoord 9

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

Antwoord 10

Om welke reden dan ook, ik heb problemen gehad met sommige van deze antwoorden, ik heb een paar helpfuncties voor mezelf geschreven, dus als je problemen hebt zoals ik, probeer deze dan eens.

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

Ze lijken goed te werken.

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

Resultaten in:

0xff
0x1234567
0b11010001101011

Antwoord 11

Om binaire reeks naar hexadecimale string te converteren, hebben we geen externe bibliotheken nodig. Gebruik geformatteerde string-literaten (bekend als F-strings). Deze functie is toegevoegd in Python 3.6 (PEP 498)

>>> bs = '0000010010001101'
>>> hexs = f'{int(bs, 2):X}'
>>> print(hexs)
>>> '48D'

Als u de hexadecimale snaren in kleine letters wilt, gebruikt u kleine “x” als volgt

f'{int(bs, 2):x}'

Waar bsBINNEN F-String is een variabele die binaire snaren bevat die voorafgaand zijn aangevraagd

F-snaren zijn meer nuttig en effectiever verloren. Ze worden niet gebruikt op hun volledige potentieel.


Antwoord 12

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

of

>>> s="0000 0100 1000 1101"
>>> hex(string.atoi(s.replace(" ",""),2))
'0x48d'

Antwoord 13

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

Other episodes