I am trying to convert some java code to python. I have a problem with the following java lines :
int toto = (int)Long.parseLong("11101101111110100111001110011010",2); String result = Integer.reverseBytes(toto);
In java, i get those results :
Long.parseLong("11101101111110100111001110011010",2) = 3992613786 (int)Long.parseLong("11101101111110100111001110011010",2) = -302353510 Integer.reverseBytes(toto) = -1703675155
I think I understand the first line, but why is there a “(int)” here ? What is it supposed to do ? (I’m a beginner in java and in byte management, and I couldn’t find any documentation that I understand regarding that point).
In python, I managed to get the first result by converting to base 2 (I found this out totally by chance) :
int("11101101111110100111001110011010",2) = 3992613786
But how can I obtain the “int” result, and then the “reverse byte” result in python ?
(By the way, I use Python 3)
Advertisement
Answer
In the end, I used the answer from gengkev here.
By playing around, I found something similar to BreizhGatch’s function, but that doesn’t require a conditional statement. n & 0x80000000 extracts the 32-bit sign bit; then, the – keeps the same 32-bit representation but sign-extends it; finally, the extended sign bits are set on n.
def toSigned32(n):
n = n & 0xffffffff
return n | (-(n & 0x80000000))