Encode Bytes

John Machin sjmachin at lexicon.net
Wed Jul 11 16:56:22 EDT 2007


On Jul 12, 4:40 am, "albert_k_arhin" <albert_k_ar... at yahoo.com> wrote:
> Hi All,
>       I am new to python and I am using a strip down version of
> python that does not support struc,pack,etc.
>
> I have a binary protocol that is define as follows:
>
>   PART    OffSet     Lenght
> ============================
>    ID       0            2
>    VER      2            1
>    CMD      3            2
>    PGKID    5            2
>    DATE     7            3
>    TIME    10            3
>    CRC     13            2
>    DLEN    15            2
>
> How do I encode these the offset is in Bytes.
>

You haven't defined your data precisely enough to allow use of
struct.pack even if it were available to you.

Are all of the 1-byte fields unsigned integers (range 0 to 255
inclusive), or are some signed (range -128 to 127)?
Are all of the 2-byte fields unsigned integers (range 0 to 65535
inclusive) or are some signed (-32768 to 32767)?
What is the format of the 3-byte DATE and TIME fields? What type is
your starting value -- datetime.datetime?
Littlendian or bigendian?

Here's an example of the sort of function you'll need to write:

>>> def packu2le(anint):
...     """Produce a 2-byte littlendian string from an unsigned
integer"""
...     assert 0 <= anint <= 65535
...     byte0 = anint & 0xff
...     byte1 = anint >> 8
...     return chr(byte0) + chr(byte1)
...
>>> packu2le(0)
'\x00\x00'
>>> packu2le(255)
'\xff\x00'
>>> packu2le(256)
'\x00\x01'
>>> packu2le(65535)
'\xff\xff'
>>> packu2le(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in packu2le
AssertionError
>>>

HTH,
John






More information about the Python-list mailing list