使用Python套接字,使用我发现的一些代码来制作telnet服务器。服务器代码工作正常。我需要发送十六进制字符串到/从客户端do来逃避字符问题。当我像这样向客户端发送数据时:
conn.sendall('\x74\x65\x73\x74\x31\x32\x33\x0D\x0A')
或者
^{pr2}$它工作得很好。当我试图创建一个字符串并将其存储在变量中时(如下面的kludge):
def recover_raw_data(data):
data_list = []
hex_list = []
for items in data:
data_list.append(ord(items))
for items in data_list:
hex_list.append("\\")
value = '%02X' % int(items)
hex_list.append("0x" + value)
print hex_list
almost_final_data = "".join(hex_list)
just_about_final_data = almost_final_data.replace('\\0x', '\\x')
final_data = just_about_final_data
print final_data
conn.sendall(final_data)
return()
你可以打印这个乱七八糟的输出,它看起来是正确的,一个Wireshark捕获显示的数据包是逐字输出的,而不是ascii格式。。。在
例如\x31\x32\x33\x34\x35\x0D\x0A
我试过了。编码和我在谷歌上找到的很多其他想法。。。想知道为什么我不能从一个有效的变量创建一个字符串。。。任何帮助都将不胜感激。在
(Python2)
str
是一个字节序列。例如,'\x31\x32\x33\x34\x35\x0D\x0A'
是一个字节序列。通过将list
应用于str
,可以更清楚地看到哪个字节:你看,这里有8个字节。
^{pr2}$'\x31'
都是一个字节。 因此,您不能通过将反斜杠字符"\\"
与x
字符和数字字符连接起来来重现str
: (例如原始字符串r'\x31\x32\x33\x34\x35\x0D\x0A'
。)我不确定我是否理解
recover_raw_data
的目的,所以也许下面的内容是错误的,但在我看来,您所需要的只是:(如果这是真的,那么您根本不需要
recover_raw_data
,因为conn.sendall
就足够了…)实际上,通过使用
'string_escape'
编解码器解码,可以将文本字符串(带反斜杠和x
字符)转换为所需的字符串:但我真的认为你不应该这么做。你的
data
在你经历这个繁琐的过程之前似乎已经是正确的形式了。在如果您展示了一个示例,说明
recover_raw_data
的输入是什么样子的,以及您希望对它做什么,也许我们可以建议如何修改recover_raw_data
。在相关问题 更多 >
编程相关推荐