将数字列表转换为Python中包含实际值的字符串

将数字列表转换为Python中包含实际值的字符串,python,list,Python,List,这是用python编写的。我不熟悉python,但不熟悉编程 x=[2,0,0,0x40,0x25,6,3] 我想把它转换成一个字符串的格式 x2=“\0x02\0x00\0x00\0x40\0x25\0x06\0x03” 列表中的二进制值位于字符串中。我可以用蛮力做到,但必须有更好的方法 给你 x = [2, 0, 0 , 0x40, 0x25, 6, 3] x2 = '' for num in x: x2 += '\\0x{:02x}'.format(num) >>&

这是用python编写的。我不熟悉python,但不熟悉编程

x=[2,0,0,0x40,0x25,6,3]

我想把它转换成一个字符串的格式

x2=“\0x02\0x00\0x00\0x40\0x25\0x06\0x03”

列表中的二进制值位于字符串中。我可以用蛮力做到,但必须有更好的方法

给你

x = [2, 0, 0 , 0x40, 0x25, 6, 3]
x2 = ''

for num in x:
    x2 += '\\0x{:02x}'.format(num)

>>> print(x2)
\0x02\0x00\0x00\0x40\0x25\0x06\0x03
给你

x = [2, 0, 0 , 0x40, 0x25, 6, 3]
x2 = ''

for num in x:
    x2 += '\\0x{:02x}'.format(num)

>>> print(x2)
\0x02\0x00\0x00\0x40\0x25\0x06\0x03
看起来很简单

>>> print(''.join(r'\0x'+'%02x'%i for i in x))
\0x02\0x00\0x00\0x40\0x25\0x06\0x03
请注意“print”的用法-如果报告字符串本身,则在显示它时,它显然会将“\”加倍:

>>> ''.join(r'\0x'+'%02x'%i for i in x)
'\\0x02\\0x00\\0x00\\0x40\\0x25\\0x06\\0x03'
但是,看看字符本身,您会发现这是一个shell/显示问题:

>>> x2 = ''.join(r'\0x'+'%02x'%i for i in x)
>>> print x2[0], x2[1], x2[2], x2[3], x2[4], x2[5]
\ 0 x 0 2 \
看起来很简单

>>> print(''.join(r'\0x'+'%02x'%i for i in x))
\0x02\0x00\0x00\0x40\0x25\0x06\0x03
请注意“print”的用法-如果报告字符串本身,则在显示它时,它显然会将“\”加倍:

>>> ''.join(r'\0x'+'%02x'%i for i in x)
'\\0x02\\0x00\\0x00\\0x40\\0x25\\0x06\\0x03'
但是,看看字符本身,您会发现这是一个shell/显示问题:

>>> x2 = ''.join(r'\0x'+'%02x'%i for i in x)
>>> print x2[0], x2[1], x2[2], x2[3], x2[4], x2[5]
\ 0 x 0 2 \

这里有一个问题。。。我应该有“\x02\x00\x00\x40”等等,而不是“\0x02\0x00\0x00\0x40”等等。问题是“**0**x”。所以一开始就错了

蛮力法是: x2=“” 对于x中的i x2=x2+chr(一)


x2现在是一个具有正确值的字符串。应该有更好的办法。

这里有一个问题。。。我应该有“\x02\x00\x00\x40”等等,而不是“\0x02\0x00\0x00\0x40”等等。问题是“**0**x”。所以一开始就错了

蛮力法是: x2=“” 对于x中的i x2=x2+chr(一)


x2现在是一个具有正确值的字符串。应该有更好的方法。

您的“暴力”方法是什么样子的?为什么要字符串中的所有
\0
s
struct.pack
可能是您想要的。请参见下面的答案“暴力”方法是什么样子的?为什么要字符串中的所有
\0
s
struct.pack
可能就是您想要的。下面是我的答案。您的尝试很好,但可能需要稍作更改。输出包含\0x2,而不是\0x02。我不知道它们是否相等。您的字符串后面有一个反斜杠字符和一个零字符,但OP的示例中有一个包含文本空字符的字符串。我编辑了我的答案以说明格式。答案现在应该是完整的。感谢您指出:)
'\\'+“0x{:02x}.format(num)
=
“\\0x{:02x}.format(num)
和Python 3.6+
f“\\0x{num:02x}”
谢谢大家。我想我们快到了。输出字符串将只包含两个可打印字符。0x40映射到“@”,0x25映射到“%”。我想要字符串中的空值、ascii etx和stx等。您的尝试很好,但可能需要稍作更改。输出包含\0x2,而不是\0x02。我不知道它们是否相等。您的字符串后面有一个反斜杠字符和一个零字符,但OP的示例中有一个包含文本空字符的字符串。我编辑了我的答案以说明格式。答案现在应该是完整的。感谢您指出:)
'\\'+“0x{:02x}.format(num)
=
“\\0x{:02x}.format(num)
和Python 3.6+
f“\\0x{num:02x}”
谢谢大家。我想我们快到了。输出字符串将只包含两个可打印字符。0x40映射到“@”,0x25映射到“%”。我想要字符串中的空值、ascii etx和stx等。字符串中应该只有两个可打印字符,一个“@”映射到“0x40”,一个“%”映射到0x25。我想要字符串中的空字符和其他不可打印字符。字符串中应该只有两个可打印字符,一个“@”映射到“0x40”,一个“%”映射到0x25。我想要字符串中的空字符和其他不可打印字符。