"George V. Neville-Neil" email@example.com writes:
I'm attempting to write a Packet class, and a few other classes for use in writing protocol conformance tests. For the most part this is going well except that I'd like to be able to pack and unpack byte strings with values that are not 8 bit based quantities.
Well, the main thing that comes to mind is that I wouldn't regard the struct interface as being something totally wonderful and perfect.
I am aware of a few attempts to make up a better interface, such as ctypes and Bob's rather similar looking ptypes from macholib:
and various silly unreleased things I've done. They all work on the basic idea of a class schema that describes the binary structure, eg:
class Sound(Message): code = 0x06 layout = [('mask', BYTE()), ('vol', CDI(1, SDI(BYTE(), 1/255.0), 1.0)), ('attenuation', CDI(2, SDI(BYTE(), 1/64.0), 1.0)), ('entitychan', SHORT()), ('soundnum', BYTE()), ('origin', COORD()*3)]
You may want to do something similar (presumably the struct module or some other c stuff would be under the hood somewhere).
I don't really see a need to change CPython here, unless some general binary parsing scheme becomes best-of-breed and a candidate for stdlib inclusion.
PS: This is probably more comp.lang.python material.