Python从二进制字符串转换为十六进制

时间:2010-01-15 14:47:57

标签: python binary hex

如何在Python中将二进制字符串转换为相应的十六进制值?

我有0000 0100 1000 1101,我希望得到048D我正在使用Python 2.6。

13 个答案:

答案 0 :(得分:57)

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时提供基数是错误的       非字符串。如果base为零,则基于该算法猜测正确的基数       字符串内容。如果参数超出整数范围a       将返回长对象。

hex的文件:

hex(number) -> string

Return the hexadecimal representation of an integer or long
     

整数。

答案 1 :(得分:24)

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

答案 2 :(得分:14)

使用python的binascii模块

import binascii

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

print binascii.hexlify(binaryData)

答案 3 :(得分:6)

将二进制转换为十六进制而不忽略前导零:

您可以使用format()内置函数,如下所示:

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

答案 4 :(得分:3)

不使用混乱的连接和填充:

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

将保留带有填充的十六进制表示

答案 5 :(得分:2)

此概述对某人可能有用:bin, dec, hex in python在python中的bin,dec和hex之间进行转换。

我会做的:

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

结果:“ 048d”

答案 6 :(得分:1)

在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'

答案 7 :(得分:0)

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

答案 8 :(得分:0)

无论出于何种原因,我对这些答案都有疑问,我已经为自己编写了几个辅助函数,所以如果你遇到像我这样的问题,那就试试吧。

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

答案 9 :(得分:0)

要将二进制字符串转换为十六进制字符串,我们不需要任何外部库。使用格式化的字符串文字(称为f字符串)。此功能已在python 3.6(PEP 498)中添加

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

如果要小写十六进制字符串,请按以下方式使用小写的“ x”

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

f字符串中的bs是一个变量,其中包含事先分配的二进制字符串

f字符串丢失更加有用和有效。没有充分利用它们的潜力。

答案 10 :(得分:-1)

假设它们按4分组并用空格分隔。这保留了前导0。

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

答案 11 :(得分:-3)

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

答案 12 :(得分:-3)

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