prob with struct and byte order

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Tue Jul 25 01:50:04 EDT 2006


In <1153785622.870353.85960 at b28g2000cwb.googlegroups.com>, nephish wrote:

> tohex gave me
> '53 54 58
  
   S  T  X

> 00 00 00 34

Length!?  Decimal 57.

> 00 00 00 c8

Type!?  Decimal 200.

> 70 69 76 6f 74 72 61 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 74 72 61 63 31 70 69 76 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Payload!?

> 45 4e 58'

  E  N  X

> this is the login message (message type 200)

import struct

data = ('STX'
        '\x00\x00\x004'
        '\x00\x00\x00\xc8'
        'stateman\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
        '\x00\x00\x00state1man\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
        '\x00\x00\x00\x00ENX')

def split_message(message):
    if not (message.startswith('STX') or message.endswith('ENX')):
        raise ValueError('missing start or end sequence')
    length, message_type = struct.unpack('>II', message[3:11])
    return length, message_type, message[11:-3]

print 'length: %d\ntype: %d\n%r' % split_message(data)

The problem I see is the length.  The payload without STX, ENX and the two
numbers in front is 47 bytes so there's a 5 byte difference.  You have to
look at some more messages to get an idea how the length corresponds to
the actual payloads length.

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list