On Dec 11, 10:51 pm, eliss <[EMAIL PROTECTED]> wrote: > On Dec 11, 2:28 pm, eliss <[EMAIL PROTECTED]> wrote: > > > > > On Dec 11, 12:38 pm, Larry Bates <[EMAIL PROTECTED]> 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. :-) -- http://mail.python.org/mailman/listinfo/python-list