I'm parsing unsigned bits from a DatagramSocket. I have a total of 24bits (or 3 bytes) coming in – they are: 1 unsigned 8bit integer followed by a 16bit signed integer. But java never stores anything more than a signed byte into a byte/byte array? When java takes in these values, do you lose that last 8th bit?
DatagramSocket serverSocket = new DatagramSocket(666);
byte[] receiveData = new byte[3]; <--Now at this moment I lost my 8th bit
System.out.println("Binary Server Listing on Port: "+port);
while (true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
byte[] bArray = receivePacket.getData();
byte b = bArray[0];
}
Did I now lose this 8th bit since I turned it into a byte? Was it wrong I initialized a byte array of 3 bytes?
Best Answer
No. You just end up with a negative value when it's set.
So to get a value between 0 and 255, it's simplest to use something like this:
First the
byte
is promoted to anint
, which will sign extend it, leading to 25 leading 1 bits if the high bit is 1 in the original value. The& 0xff
then gets rid of the first 24 bits again :)