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

2024-04-20 12:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是将二进制值转换为python解释为的“bytestring”格式。示例:1111111111111将是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格式?你知道吗


Tags: 方法示例目标格式二进制解决方案inthex
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语法;这只适用于字符串文本。你知道吗

在Python2中,可以使用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{'

可以这样使用^{}

>>> import binascii
>>> s = "11110100111100001110110101111011"
>>> binascii.unhexlify(format(int(s, 2), 'x'))
'\xf4\xf0\xed{'

相关问题 更多 >