raw string from mmap.read() possible?
djones at shcorp.com
Mon Nov 10 21:14:50 CET 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:
> "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:
That worked, thanks! I was looking for a solution on the wrong end.
More information about the Python-list