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

syl*_*ain 50 python binary hex

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

我有0000 0100 1000 1101,我想让048D我使用Python 2.6.

Eli*_*sky 60

int给定基数2然后hex:

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

>>> hex(int('0000010010001101', 2))
'0x48d'
Run Code Online (Sandbox Code Playgroud)

文件int:

int(x[, base]) -> integer

Convert a string or number to an integer, if possible.  A floating
Run Code Online (Sandbox Code Playgroud)

point参数将被截断为零(这不包括浮点数的字符串表示!)转换字符串时,请使用可选的base.转换非字符串时提供基数是错误的.如果base为零,则根据字符串内容猜测正确的base.如果参数超出整数范围,则将返回长对象.

文件hex:

hex(number) -> string

Return the hexadecimal representation of an integer or long
Run Code Online (Sandbox Code Playgroud)

整数.

  • 这无法保留前导0. (7认同)
  • @Eli:OP明确表示他想要'048d`即希望前导零,不想要0x (3认同)
  • @Ignacio,你是对的,但我认为OP没有问过这个问题。无论如何,请++指出您的答案。 (2认同)

Ign*_*ams 26

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

  • @SO应该真正添加每种语言的颜色.在这里,它认为//是一个C++注释,并将所有内容变为灰色.//在Python中不是注释,而是截断整数除法 (4认同)
  • 你能解释一下这是怎么回事? (2认同)
  • @Dennis第一行只是清理二进制字符串.第二行将其格式化为十六进制字符串,填充为`(len(bstr)+ 3)// 4`十六进制数字,这是"位数/ 4"向上舍入,即所需的十六进制数字的数量.第二行的最后一部分将二进制字符串解析为数字,因为%X格式说明符用于数字而不是二进制字符串. (2认同)

use*_*040 14

使用python的binascii模块

import binascii

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

print binascii.hexlify(binaryData)
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

"{0:0>4X}".format(int("0000010010001101", 2))
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于 2 字节数字,而 Ignacio 的答案适用于任何长度。 (2认同)