在Python中删除字符串中的\x

2 投票
4 回答
3171 浏览
提问于 2025-04-18 07:11


我需要通过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')

撰写回答