need the unsigned value from dl.call()
MRAB
google at mrabarnett.plus.com
Tue Dec 11 18:36:45 EST 2007
On Dec 11, 10:51 pm, eliss <eliss.carm... at gmail.com> wrote:
> On Dec 11, 2:28 pm, eliss <eliss.carm... at gmail.com> wrote:
>
>
>
> > On Dec 11, 12:38 pm, Larry Bates <larry.ba... at websafe.com> wrote:
>
> > > Diez B. Roggisch wrote:
> > > > Larry Bates wrote:
>
> > > >> eliss wrote:
> > > >>> I'm using dl.call() to call a C function in an external library. It's
> > > >>> working great so far except for one function, which returns an
> > > >>> unsigned int in the C version. However, in python it returns a signed
> > > >>> value to me. How can I get the unsigned value from this? I haven't
> > > >>> brushed up on my two's complement in a while, so I was hoping someone
> > > >>> could give me a hand.
>
> > > >>> Thanks
>
> > > >>> eliss
> > > >> It is returning 32 bits. If the sign bit (bit 32) is on it appears as a
> > > >> negative number. Test for negative and multiply the absolute value * 2.
> > > >> That should get you the unsigned value you want in a long.
>
> > > > Erm... Nope.
>
> > > > All bits set is -1 - so according to your recipe, that would be abs(-1) * 2
> > > > = 2
>
> > > > I'd suggest this formula:
>
> > > > if value < 0:
> > > > value = 2^32 + value + 1
>
> > > > Diez
>
> > > Thanks for the correction. You are of course correct.
>
> > > -Larry
>
> > Hi thanks for the responses but I'm afraid I don't see how either
> > formula works.
>
> > Lets say I get the return value of -5, which is 1011b when it should
> > be 11. Then according to the formula it would be 2^4-5+1=12
>
> > But it should be 11...
>
> Seems like the simple formula of:
>
> if value < 0:
> value = 2^32 + value
>
> might just work. Thanks :)
You're working in Python so that should be:
if value < 0:
value = 2 ** 32 + value
because ^ is exclusive-or. :-)
More information about the Python-list
mailing list