我在解析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)
更具体地说,我想解析我认为的unsigned int。而现在我不确定下一步该尝试什么。我对Python中的套接字和字节转换完全不熟悉,所以任何建议都会有所帮助:)
谢谢, 托马斯
答案 0 :(得分:3)
unsigned int32的长度为4个字节,因此您必须将4个字节输入struct.unpack
。
替换
mybytes = data[16:19]
与
mybytes = data[16:20]
(正确的数字是不包括的第一个字节,即范围(16,19)= [16,17,18]),你应该好好去。