writeable buffer and struct.pack_into and struct.unpck_from

Aaron "Castironpi" Brady castironpi at gmail.com
Sat Sep 20 22:33:17 EDT 2008


On Sep 20, 6:42 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Sat, 20 Sep 2008 15:45:48 -0300, Tzury Bar Yochay  
> <Afro.Syst... at gmail.com> escribió:
>
> > I can't find in the documentation the way to use these two functions.
>
> > can someone share a simple code that utilize these two functions?
>
> struct.pack_into is intended to "fill" a buffer you got from somewhere,  
> probably other language or process. ctypes.create_string_buffer may be  
> used to create a writable buffer in python code.
>
> py> from ctypes import create_string_buffer
> py> b = create_string_buffer(10)
> py> b.raw
> '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
> py> from struct import *
> py> pack_into("hhh", b, 0, 1, 2, -1)
> py> b.raw
> '\x01\x00\x02\x00\xff\xff\x00\x00\x00\x00'
>
> unpack_from does the opposite.
> Before Python 2.5,

That was when Python broke string immutability with the ctypes module.

> you had to use pack to create a string object, and then  
> copy its contents into the destination buffer; using pack_into avoids the  
> memory copy.
>
> --
> Gabriel Genellina

'mmap' seems to have always offered random-access writes.  A search
through the implementation for "tp_as_buffer" returns a lot of zeros
however.




More information about the Python-list mailing list