Need elegant way to cast four bytes into a long
Alex Martelli
aleax at aleax.it
Fri Aug 8 12:30:46 EDT 2003
William S. Huizinga wrote:
> I've got an array.array of unsigned char and would like to make a slice
> of that array (e.g. a[0:4]) become one long like I would in "C" :
>
> l = ((unsigned long *) (&a[0]))[0];
What about:
b = array.array('L')
b.fromstring(a[0:4].tostring())
l = b[0]
I think this should faithfully reproduce the endianness-related
unportability of that C fragment (cannot necessarily reproduce
crashes due to possible use of misaligned pointers, though:-).
Actually, I believe you do not really need the .tostring call
in modern Python -- just b.fromstring(a[0:4]) should be
equivalent (and faster). Better, if you need to transform
into longs _many_ adjacent segments of 4 bytes each, this
approach does generalize, and speed is good. Finally, you
can remedy endianness issue with the .byteswap method...
Alex
More information about the Python-list
mailing list