Преобразование Python из двоичной строки в шестнадцатеричное - PullRequest
47 голосов
/ 15 января 2010

Как я могу выполнить преобразование двоичной строки в соответствующее шестнадцатеричное значение в Python?

У меня есть 0000 0100 1000 1101, и я хочу получить 048D Я использую Python 2.6.

Ответы [ 11 ]

57 голосов
/ 15 января 2010

int дано основание 2 и затем hex:

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

>>> hex(int('0000010010001101', 2))
'0x48d'

Док int:

int(x[, base]) -> integer

Convert a string or number to an integer, if possible.  A floating

точка аргумент будет усечен до нуля (без учета строки представление числа с плавающей точкой!) При преобразовании строки, использование дополнительная база. Ошибочно указывать базу при конвертации нестроковый. Если база равна нулю, правильная база угадывается на основе содержимое строки. Если аргумент находится вне целочисленного диапазона a Вместо этого будет возвращен длинный объект.

Док hex:

hex(number) -> string

Return the hexadecimal representation of an integer or long

целое число.

24 голосов
/ 15 января 2010
bstr = '0000 0100 1000 1101'.replace(' ', '')
hstr = '%0*X' % ((len(bstr) + 3) // 4, int(bstr, 2))
14 голосов
/ 10 ноября 2015

Использовать модуль Python binascii

import binascii

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

print binascii.hexlify(binaryData)
6 голосов
/ 15 января 2010

Преобразование двоичного в гекс без игнорирования ведущих нулей:

Вы можете использовать встроенную функцию format () следующим образом:

"{0:0>4X}".format(int("0000010010001101", 2))
3 голосов
/ 30 июля 2013

Использование беспорядочных конкатенаций и отступов:

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

Даст шестнадцатеричное представление с сохранением отступа

1 голос
/ 08 августа 2018

На python3 с помощью функции hexlify :

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

a="abc123"
c=bin2hex(a)
c

вернет вам:

b'616263313233'

, и вы можете получить строку этого как:

c.decode('utf-8')

дает:

'616263313233'
0 голосов
/ 29 августа 2018
 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));
0 голосов
/ 03 апреля 2015

По какой-то причине у меня были проблемы с некоторыми из этих ответов, я пошел и написал для себя пару вспомогательных функций, поэтому, если у вас есть проблемы, как у меня, попробуйте эти.

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

Кажется, они хорошо работают.

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

Результат:

0xff
0x1234567
0b11010001101011
0 голосов
/ 14 июля 2013
format(int(bits, 2), '0' + str(len(bits) / 4) + 'x')
0 голосов
/ 15 января 2010
>>> import string
>>> s="0000 0100 1000 1101"
>>> ''.join([ "%x"%string.atoi(bin,2) for bin in s.split() ]  )
'048d'
>>>

или

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