我知道爲了通過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