如何将转义连接到字符串?

时间:2014-07-25 14:02:36

标签: python binary escaping bytearray

我的目标是将二进制值转换为" 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格式?

2 个答案:

答案 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{'