I am writing a piece of code in Java (I am pretty new to Java) that I previously wrote in C #. Here's the code and example in C #.
ushort number = 0xAABB;
I use the custom convrter bit in .NET, as it defaults to little endian. In any case, from what I understand about java, if I want to use the same result as byte [], I should expect my values โโ(170 and 187) to be less by 128 (Byte.MAX_VALUE + 1) , i.e. (42, 59) - because of .net and java having a different range for a type byte. Here is what I wrote in Java to emulate my logic above.
public class Ushort { private int value = 0; public Ushort(int i) { value = i - (Short.MAX_VALUE + 1); } public int get() { return value; } public byte[] getBytes() { byte[] result = new byte[]{ (byte) (value >>> 24), (byte) (value >>> 16), (byte) (value >>> 8), (byte) value}; return new byte[]{result[2], result[3]}; } }
However, when I call the above code with
new Ushort(0xAABB).getBytes()
The result is [42, -69] [42, 59]. The last byte is 128 less than it should. I really need some pointers on how to do this correctly, and if my logic is correct. I also need to do the same for uint, ulong, etc., so I need to get it right.
source share