2010-03-23 191 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)=),你應該很好去。