读取UDP数据包
我在解析一个UDP数据包时遇到了一些问题。我正在接收这些数据包,并把数据和发送者的地址存储在变量'data'和'addr'中,代码是:
data, addr = UDPSock.recvfrom(buf)
这段代码把数据解析成了字符串,但我现在不知道怎么把它转换成字节。我知道数据包的结构总共有28个字节,而我想提取的数据在第17到28个字节之间。
我试过这样做:
mybytes = data[16:19]
print struct.unpack('>I', mybytes)
--> struct.error: unpack str size does not match format
还有这样:
response = (0, 0, data[16], data[17], 6)
bytes = array('B', response[:-1])
print struct.unpack('>I', bytes)
--> TypeError: Type not compatible with array type
以及这样:
print "\nData byte 17:", str.encode(data[17])
--> UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 0: ordinal not in range(128)
更具体来说,我想解析我认为是无符号整数的内容。但现在我不确定接下来该尝试什么。我对Python中的套接字和字节转换完全是新手,所以任何建议都很有帮助 :)
谢谢,
托马斯
1 个回答
3
一个无符号的32位整数占用4个字节,所以你需要把4个字节传给 struct.unpack
。
把
mybytes = data[16:19]
替换成
mybytes = data[16:20]
(右边的数字是第一个不包括的字节,也就是说,range(16,19) = [16,17,18]),这样就没问题了。