raw string from mmap.read() possible?
Dan Jones
djones at shcorp.com
Mon Nov 10 15:14:50 EST 2003
On Sun, 2003-11-09 at 17:25, Fredrik Lundh wrote:
> Dan Jones wrote:
>
> > yuvframe = mmap.read(WIDTH*HEIGHT*3)
> > rgbframe = yuv.yuv2rgb(WIDTH, HEIGHT, yuvframe)
> >
> > At this point it gives a typeerror: argument 3 must be string without
> > null bytes, not str.
>
> your C extension uses the "s" marker for the third argument. don't
> do that if you plan to pass in null bytes; use "s#" instead.
>
> see the documentation for details:
>
> http://www.python.org/doc/current/api/arg-parsing.html
>
> "s" (string or Unicode object) [char *]
>
> Convert a Python string or Unicode object to a C pointer to a character
> string. /.../ The C string is NUL-terminated. The Python string must not
> contain embedded NUL bytes; if it does, a TypeError exception is raised.
> /.../
>
> "s#" (string, Unicode or any read buffer compatible object) [char *, int]
>
> This variant on "s" stores into two C variables, the first one a pointer to
> a character string, the second one its length. In this case the Python
> string may contain embedded null bytes. /.../
>
> > but if I send it a raw string it doesn't complain:
> >
> > rgbframe = yuv.yuv2rgb(WIDTH, HEIGHT, r"\0\0\0\0")
> >
> > I'm assuming this is happening because C interprets NULL as the end of
> > the string. Is there a way to get a raw string directly from the
> > mmap.read() call or do I have to do a conversion after the read?
>
> when you've fixed the C extension, I suggest reading the section
> on "raw strings" in the language reference:
>
> http://www.python.org/doc/current/ref/strings.html
>
> </F>
That worked, thanks! I was looking for a solution on the wrong end.
Dan
More information about the Python-list
mailing list