У меня возникли проблемы при разборе 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)
Более конкретно, я хочу разобрать то, что я считаю неподписанным int. И теперь я не уверен, что попробовать дальше. Я совершенно новичок в сокетах и байтовых преобразованиях в Python, поэтому любой совет будет полезен:)
Спасибо,
Томас