我在解析 UDP 数据包时遇到了一些问题。我正在接收数据包并将数据和发件人地址存储在变量“数据”和“地址”中:
数据,地址 = 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 中的套接字和字节转换完全陌生,所以任何建议都会有所帮助:)
谢谢, 托马斯
最佳答案
unsigned int32 的长度为 4 个字节,因此您必须将 4 个字节输入 struct.unpack
。
替换
mybytes = data[16:19]
与
mybytes = data[16:20]
(右边的数字是不包括的第一个字节,即 range(16,19) = [16,17,18]),你应该可以开始了。
关于python - 读取 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501882/