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

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

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

226252 次浏览

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

点 参数将被截断为零(这不包括字符串) 表示浮点数!)转换字符串时, 使用 转换可选的基类时提供基类是错误的 如果基数为零,则根据 如果参数在整数范围之外,则为 而是返回 long 对象。

hex的文档:

hex(number) -> string


Return the hexadecimal representation of an integer or long

整数。

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

b = '0000 0100 1000 1101'
h = ''.join(hex(int(a, 2))[2:] for a in b.split())
bstr = '0000 0100 1000 1101'.replace(' ', '')
hstr = '%0*X' % ((len(bstr) + 3) // 4, int(bstr, 2))
>>> 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'

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

您可以像下面这样使用 format ()内置函数:

"{0:0>4X}".format(int("0000010010001101", 2))
format(int(bits, 2), '0' + str(len(bits) / 4) + 'x')

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

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

将给出一个保留填充的十六进制表示

不管出于什么原因,我对这些答案中的一些有问题,我已经为自己编写了几个 helper 函数,所以如果您像我一样有问题,请尝试使用这些函数。

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

使用 python 的 binascii 模块

import binascii


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


print binascii.hexlify(binaryData)

在 python3上使用 巫术函数:

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

我会这么做:

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

结果:’048d’

要将二进制字符串转换为十六进制字符串,我们不需要任何外部库。使用格式化的字符串文字(称为 f-string)。这个特性是在 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 字符串失去了更多的有用性和有效性。它们没有被充分利用。