2010-03-23 193 views
3

我在解析UDP数据包时遇到了一些问题。我收到的报文,并用存储在变量“数据”和“地址”的数据,并发送器地址:读取UDP数据包

数据,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插座和字节转换,因此任何意见将是有益的:)

感谢, 托马斯

回答

3

一个无符号INT32是4个字节长,所以你必须为4个字节送入struct.unpack

替换

mybytes = data[16:19] 

mybytes = data[16:20] 

(右数是[16,17,18]不包含第一个字节,即范围(16,19)=),你应该很好去。