我有一个短计数器,它递增并用作标识符。我需要将标识符作为网络套接字上的二进制数据发送。
因此,如果我有一个短值,我可以这样做以“打包”两个字节:
short id = 1;
byte val = (byte)(id & 0xFF);
byte val2 = (byte)((id >>> 8) & 0xFF);
System.out.printf("id=%d, val = id & 0xFF = %d, val2 = (id >>> 8) & 0xFF = %d\n",
id, val, val2);
现在当 id = 1 这工作正常。
但是当 id = 255 我得到:
short id = 255;
byte val = (byte)(id & 0xFF); //val = -1
byte val2 = (byte)((id >>> 8) & 0xFF); //val2 = 0
现在我知道二进制中的 255 是 11111111,这意味着 java 字节值的 -1。我是否正确地认为java如何解释它是无关紧要的,如果我作为字节二进制发送 11111111 那么在另一端它可以解释它但是它想要吗?