How to convert bytearray into integer?
Thomas Jollans
thomas at jollybox.de
Mon Aug 16 13:50:14 EDT 2010
On Monday 16 August 2010, it occurred to Jacky to exclaim:
> Hi there,
>
> Recently I'm facing a problem to convert 4 bytes on an bytearray into
> an 32-bit integer. So far as I can see, there're 3 ways:
> a) using struct module,
Yes, that's what it's for, and that's what you should be using.
> b) using ctypes module, and
Yeeaah, that would work, but that's really not what it's for. from_buffer
wants a writable buffer interface, which is unlikely to be what you want.
> c) manually manipulation.
Well, yes, you can do that, but it gets messy when you're working with more
complex data structures, or you have to consider byte order.
> Are there any other ways?
You could write a C extension module tailored to your specific purpose ;-)
> number = 1
> 1.00135803223e-05
> 1.00135803223e-05
> 5.96046447754e-06
> -----
>
> As the number of benchmarking loops decreasing, method c which is
> manually manipulating overwhelms the former 2 methods. However, if
> number == 10K, the struct method wins.
>
> Why does it happen?
struct wins because it's built for the job.
As for the small numbers: don't take these numbers seriously. Just don't. This
may be caused by the way your OS's scheduler handles things for all I know. If
there is an explanation for this unscientific observation, I have two guesses
what it might be:
* struct and ctypes still need to do some setup work, or something
* somebody is optimising something, but doesn't know what they should be
optimising in the first place after only a few iterations.
More information about the Python-list
mailing list