Re: Handling bytes
Stefan Behnel <[email protected]> Fri, 09 May 2008 10:31:59 +0200
| Newsgroups | gmane.comp.python.pyrex |
|---|---|
| Message-ID | <[email protected]> |
Hi, Brad Schick wrote: > On 5/8/2008 12:05 AM, Stefan Behnel wrote: >>> It just seems >>> so ugly in what is otherwise a fairly clean language. Particularly when >>> the data sometimes starts life as a list. How do you go about stuffing >>> 'bytes' into a string? With arrays as below? Or with cStringIO? Yuck and >>> yuck ;) >>> >> Sure, why not? You can also create an empty string and fill it yourself: >> >> cdef int i >> cdef char* s >> py_s = PyString_FromStringAndSize(NULL, len(data)) >> s = py_s >> for i in range(len(data)): >> s[i] = l[i] >> > > I meant in python code. In other words, the code calling into the pyrex > module that will need to cram everything into strings. That's fine if it > the data starts in a string or file, but its pretty ugly and inefficient > if it starts in some other sequence like a list. But that's just an API design question. At the API leve, you can accept byte strings and iterables that return byte numbers, and just write a Pyrex function that detects what you actually got and return a normalised internal representation (and maybe raise an exception for everything else). Then just call it at the beginning of every API function and you're done thinking about this issue. Stefan