我的目标是将二进制值转换为" bytestring"格式python将其解释为。示例:1111111111111111将为0xffff,解释时将表示为\ xff \ xff \ xff。如果有一种更直接的方法将其转换为这种格式,请告诉我,因为这是理想的,因为我现在使用蛮力与此解决方案:
hexnum = hex(int("11110100111100001110110101111011",2))
hexstring = str(hexnum)[2:]
finalstr = ""
i = 0
while(i<=len(hexstring)):
finalstr+= hexstring[i:i+2]
finalstr+= "\x"
i=i+2
我的问题是:
print repr(finalstr)
我收到错误
ValueError:invalid \ x escape
如何正确连接转义或如何将二进制字符串转换为python使用的十六进制bytearray格式?
答案 0 :(得分:2)
在Python 3中:
v = int("11110100111100001110110101111011",2)
v.to_bytes((v.bit_length() + 7) // 8, 'big')
产生由位表示的字节值:
>>> v = int("11110100111100001110110101111011",2)
>>> v.to_bytes((v.bit_length() + 7) // 8, 'big')
b'\xf4\xf0\xed{'
您不能只添加\x
语法;只适用于字符串文字。
在Python 2中,您可以改为使用bytearray()
,因为它采用0-255范围内的整数列表:
v = int("11110100111100001110110101111011",2)
bytes_list = []
while v:
v, one_byte = divmod(v, 256)
bytes_list.append(one_byte)
str(bytearray(bytes_list[::-1]))
演示:
>>> v = int("11110100111100001110110101111011",2)
>>> bytes_list = []
>>> while v:
... v, one_byte = divmod(v, 256)
... bytes_list.append(one_byte)
...
>>> bytearray(bytes_list[::-1])
bytearray(b'\xf4\xf0\xed{')
>>> str(bytearray(bytes_list[::-1]))
'\xf4\xf0\xed{'
答案 1 :(得分:2)
您可以像这样使用binascii.unhexlify
:
>>> import binascii
>>> s = "11110100111100001110110101111011"
>>> binascii.unhexlify(format(int(s, 2), 'x'))
'\xf4\xf0\xed{'