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 7 1088
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.
Larry
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
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
On Dec 11, 12:38 pm, Larry Bates <larry.ba...@websafe.comwrote:
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^45+1=12
But it should be 11...
On Dec 11, 2:28 pm, eliss <eliss.carm...@gmail.comwrote:
On Dec 11, 12:38 pm, Larry Bates <larry.ba...@websafe.comwrote:
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^45+1=12
But it should be 11...
Seems like the simple formula of:
if value < 0:
value = 2^32 + value
might just work. Thanks :)
En Tue, 11 Dec 2007 19:28:34 0300, eliss <el***********@gmail.com>
escribiï¿½:
On Dec 11, 12:38 pm, Larry Bates <larry.ba...@websafe.comwrote:
>Diez B. Roggisch wrote:
Larry Bates wrote: eliss wrote: 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
I'd suggest this formula:
if value < 0:
value = 2^32 + value + 1
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^45+1=12
But it should be 11...
Yes, both formulae were wrong, omit the "+1" in the last one.
Another way is to use a bitwise and (&) with a number whose bits are all
1's.
For 4 bits (your example), you need 1111b = 0xF
py5 & 0xF
11
For a 32bit number, you have to use x & 0xFFFFFFFF (or 0xFFFFFFFFL on
older Python versions)
>>5 & 0xffffffff
4294967291L

Gabriel Genellina
On Dec 11, 10:51 pm, eliss <eliss.carm...@gmail.comwrote:
On Dec 11, 2:28 pm, eliss <eliss.carm...@gmail.comwrote:
On Dec 11, 12:38 pm, Larry Bates <larry.ba...@websafe.comwrote:
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^45+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 exclusiveor. :) This discussion thread is closed Replies have been disabled for this discussion. Similar topics
8 posts
views
Thread by Rade 
last post: by

19 posts
views
Thread by Holger Hasselbach 
last post: by

10 posts
views
Thread by tinesan 
last post: by

5 posts
views
Thread by Confused User 
last post: by

36 posts
views
Thread by Digital Puer 
last post: by

10 posts
views
Thread by Tomás 
last post: by

21 posts
views
Thread by Johan Tibell 
last post: by

8 posts
views
Thread by skumar434 
last post: by
           