reading hex values elegantly from a datagram

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Dave

    reading hex values elegantly from a datagram

    Hi,

    This is doubtless a really dumb question but is there an elegant way
    of reading numbers formatted as hex from a datgram?

    I get a datgram which contains values like this:

    ---DATAGRAM---
    2aef2d43etc...
    ---/DATAGRAM--
    where this represents 4 numbers: 2a, ef, and 2d43.

    At the moment I am doing crazy things like converting it to a string,
    slicing characters off (ie id = packet[0:2]), adding 0x to the front
    and exec-ing the whole thing to get an integer.

    I'll put my code in if you really want but it's just embarassing.

    This is my first time trying to do something with sockets, so please
    tell me if I have entirely missed the point. I know that you can use
    read to get a number of bytes, but will that solve my problem? Can
    anyone point me in the direction of a fool (ie me) proof tutorial on
    using bits in python because I can't find anything. For example, is
    it possible to read the binary data? At least then I am sure about
    the packet structure (for a RADIUS RFC 2865 server, in the unlikely
    event that anyone is interested).

    TIA

    Dave
  • George Young

    #2
    Re: reading hex values elegantly from a datagram

    On Tue, 26 Aug 2003 05:29:46 -0700, Dave wrote:
    [color=blue]
    > This is doubtless a really dumb question but is there an elegant way
    > of reading numbers formatted as hex from a datgram?
    >
    > I get a datgram which contains values like this:
    >
    > ---DATAGRAM---
    > 2aef2d43etc...
    > ---/DATAGRAM--
    > where this represents 4 numbers: 2a, ef, and 2d43.
    >
    > At the moment I am doing crazy things like converting it to a string,
    > slicing characters off (ie id = packet[0:2]), adding 0x to the front
    > and exec-ing the whole thing to get an integer.
    >
    > I'll put my code in if you really want but it's just embarassing.
    >
    > This is my first time trying to do something with sockets, so please
    > tell me if I have entirely missed the point. I know that you can use
    > read to get a number of bytes, but will that solve my problem? Can
    > anyone point me in the direction of a fool (ie me) proof tutorial on
    > using bits in python because I can't find anything. For example, is
    > it possible to read the binary data? At least then I am sure about
    > the packet structure (for a RADIUS RFC 2865 server, in the unlikely
    > event that anyone is interested).[/color]

    First order improvement: instead of adding 0x and exec'ing,
    use the built in "int" function: int('2a', 16) ==> 42 .

    Better, use the "struct" standard library module, something like:
    import struct
    data = mysocket.recv(M AX_UDP_LEN)
    struct.unpack(' BBH', data[0:4]) ==> (42, 239, 17197)

    Of course you must look carefully at byte order, signed/unsigned,
    etc. Do:
    import struct
    help(struct)
    for details.

    Comment

    • Paul Rubin

      #3
      Re: reading hex values elegantly from a datagram

      davbucko@yahoo. com (Dave) writes:[color=blue]
      > At the moment I am doing crazy things like converting it to a string,
      > slicing characters off (ie id = packet[0:2]), adding 0x to the front
      > and exec-ing the whole thing to get an integer.[/color]

      Don't ever exec data from an untrusted source. Use int(packet[0:2], 16).

      Comment

      Working...