pack a three byte int

John Machin sjmachin at lexicon.net
Thu Nov 9 18:44:00 EST 2006


p.lavarre at ieee.org wrote:
> > Not as concisely as a one-byte struct code
>
> Help, what do you mean?

Help, what did you mean by the question?

"struct" == "Python struct module"

Struct module has (concise) codes B, H, I, Q for unsigned integers of
lengths 1, 2, 4, 8, but does *not* have a code for 3-byte integers.

>
> > you presumably... read... the manual ...
>
> Did I reread the wrong parts?  I see I could define a ctypes.Structure
> since 2.5, but that would be neither concise, nor since 2.3.

Looks like you ignored the first word in the sentence ("Not").

>
> > when 24-bit machines become ... popular
>
> Indeed the struct's defined recently, ~1980, were contorted to make
> them easy to say in C, which makes them easy to say in Python, e.g.:
>
> X28Read10 = 0x28
> cdb = struct.pack('>BBIBHB', X28Read10, 0, skip, 0, count, 0)
>
> But when talking the 1960's lingo I find I am actually resorting to
> horrors like:
>
> X12Inquiry = 0x12
> xxs = [0] * 6
> xxs[0] = X12Inquiry
> xxs[4] = allocationLength
> rq = ''.join([chr(xx) for xx in xxs])
>
> Surely this is wrong?  A failure on my part to think in Python?

It looks wrong (and a few other adjectives), irrespective of what
problem it is trying to solve. Looks like little-endian 4-byte integer
followed by 2-byte integer ... what's wrong with struct.pack("<IH",
X12Inquiry, allocationLength) ????

Your original question asked about bigendian 3-byte integers; have you
read the suggested solution that I posted? Does it do what you asked
(one pack call instead of three)????




More information about the Python-list mailing list