在Python中删除字符串中的\x
我需要通过Python生成一个小端格式的随机字符串。
比如说,'0010'代表256(不带'\x')。
这是我的代码。
import random
import struct
str1 = struct.pack('<Q', random.randint(1, 1000))
#Ex: str1 = '\xc9\x02\x00\x00\x00\x00\x00\x00'
但是我不知道怎么把这个字符串转换成"C902000000000000"。请给我一些建议,谢谢。
4 个回答
0
你可以通过下面的代码,简单地去掉"\x"这个部分,从"\x0034"中去掉。
ax = ax.replace("\x00" , "")
这样的话,字符串中的\x00就会被去掉了。
1
struct.pack()
会根据你指定的格式字符返回字节数据。如果你想要这些字节的 十六进制 表示形式,你需要进行转换。你可以使用字符串格式化来实现这一点:
>>> import random
>>> import struct
>>> str1 = struct.pack('<Q', random.randint(1, 1000))
>>> "".join("{:02X}".format(ord(x)) for x in str1)
'C902000000000000'
记住,在 Python 中,十六进制其实只是字符串,这样就无法进行有意义的操作。如果你想把它们转换成整数,可以使用 ord()
:
>>> list(map(ord, str1)) # Or a list comprehension, [ord(x) for x in str1]
[201, 2, 0, 0, 0, 0, 0, 0]
2
作为@msvalkon解决方案的另一种选择,你可以使用binascii
这个包,它能完成相同的功能,但方式更优雅:
>>> import random
>>> import struct
>>> str1 = struct.pack('<Q', random.randint(1, 1000))
>>> import binascii
>>> binascii.hexlify(str1)
'c902000000000000'
>>> binascii.hexlify(str1).upper()
'C902000000000000'
6
另一种替代方案,输入起来相对简单,可以使用以下方法:
>>> import random
>>> import struct
>>> str1 = struct.pack('<Q', random.randint(1, 1000))
>>> str1.encode('hex')