need the unsigned value from dl.call()

Larry Bates larry.bates at websafe.com
Tue Dec 11 15:38:38 EST 2007


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



More information about the Python-list mailing list