Byte oriented data types in python
grante at visi.com
Sun Jan 25 21:13:24 CET 2009
On 2009-01-25, Martin v. Löwis <martin at v.loewis.de> wrote:
>>>> Take a look at the struct and ctypes modules.
>>> struct is really not the choice. it returns an expanded string of the
>>> data and this means larger latency over bluetooth.
>> I don't know what you mean by "returns an expanded string of
>> the data".
>> I do know that struct does exactly what you requested.
> I disagree. He has a format (type, length, value), with the
> value being variable-sized. How do you do that in the struct
You construct a format string for the "value" portion based on
the type/length header.
>> It converts between Python objects and what is bascially a C
>> "struct" where you specify the endianness of each field and
>> what sort of packing/padding you want.
> Sure. However, in the specific case, there is really no C
> struct that can reasonably represent the data.
I don't see how that can be the case. There may not be a
single C struct that can represent all frames, but for every
frame you should be able to come up with a C struct that can
represent that frame.
> Hence you cannot really use the struct module.
Perhaps I don't understand his requirements, but I use the
struct module for protocols with type/len/value sorts of
>> I use the struct module frequenty to impliment binary,
>> communications protocols in Python. I've used Python/struct
>> with transport layers ranging from Ethernet (raw, TCP, and
>> UDP) to async serial, to CAN.
> Do you use it for the fixed-size parts, or also for the
> variable-sized data?
Both. For varible size/format stuff you decode the first few
bytes and use them to figure out what format/layout to use for
the next chunk of data. It's pretty much the same thing you do
in other languages.
More information about the Python-list