Need elegant way to cast four bytes into a long
Bengt Richter
bokr at oz.net
Fri Aug 8 15:23:00 EDT 2003
On Fri, 8 Aug 2003 10:54:38 -0500, Skip Montanaro <skip at pobox.com> wrote:
>
> wsh> I have been getting what I want in this sort of manner :
>
> wsh> l = 0L
> wsh> l = a[0]
> wsh> l += a[1] << 8
> wsh> l += a[2] << 16
> wsh> l += a[3] << 24
>
> wsh> but I think that's too wordy. Is there a more intrinsic and
> wsh> elegant way to do this?
>
>You mean like this:
>
> l = long(a[0] + a[1] << 8 + a[2] << 16 + a[3] << 24)
>
>You can use struct.unpack as well, though I'd be hard-pressed to get the
>details correct. You'd be better off with "pydoc struct".
>
>Skip
>
This won't be fast, but you get to play with 2.3 ;-)
>>> a = '\x01\x02\x03\x04'
>>> sum([ord(c)<<8*i for i,c in enumerate(a)])
67305985
>>> hex(sum([ord(c)<<8*i for i,c in enumerate(a)]))
'0x4030201'
or big-endian:
>>> a = '\x01\x02\x03\x04'
>>> sum([ord(c)<<8*i for i,c in enumerate( a[::-1])])
16909060
>>> hex(sum([ord(c)<<8*i for i,c in enumerate( a[::-1])]))
'0x1020304'
Regards,
Bengt Richter
More information about the Python-list
mailing list