我知道为了通过UDP套接字使用python发送数据必须采用以下格式“\ x41”= A。通过UDP或TCP套接字通过参数传递给脚本发送十六进制值
我有一个python脚本udp_send.py,我想在一个十六进制值发送给代表在服务器端的寄存器值。
我通过linux终端运行我的脚本>> python udp_send.py“\ x41”。我在我的python脚本中使用argv [1]读取变量。我做了一个len检查,结果是3。它忽略\,并将x,4和1分别作为1个字节,而我只希望\ x41仅表示1个字节。
我当时试图连接数据=“\ x”+“41”,但它没有工作。
“\ x”被解释为由python转义。我试图找到一种方法将十六进制值传入我的脚本并通过UDP套接字发送它?
我已经实现了以下目标。通过UDP套接字发送在python脚本中定义的十六进制值。
from socket import *
from sys import *
## Set the socket parameters
host = <ip-define-here>
port = <port-define-here>
buf = 1024
addr = (host,port)
## Create socket
UDPSock = socket(AF_INET,SOCK_DGRAM)
## Send messages
data ='\x41'
#data=argv[1] #commented out
if not data:
print "No data"
else:
if(UDPSock.sendto(data,addr)):
print "Sending message ",data
## Close socket
UDPSock.close()
我在服务器端使用wireshark并看到十六进制值41出现。
只要是明确的“41”(由2个字节)是不一样的在python“\ X41”(只有一个字节)。我的简单问题是,如何将字符“41”与“\ x”结合以形成“\ x41”,以便我可以将它分配给我的python脚本中的数据变量,以便我可以将它发送为十六进制值41.
非常感谢。正是我在找什么。我知道存在一种包装方法,只是不知道如何使用它。再一次感谢你。 – 2012-04-11 21:57:35
除了struct.pack,你还可以使用'chr(intarg)'。 – jcdyer 2012-04-17 14:41:13