インクリメントして識別子として使用される短いカウンターがあります。ネットワークソケットで識別子をバイナリデータとして送信する必要があります。
したがって、値が短い場合は、これを実行して2バイトで「パック」することができます。
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として送信すると、もう一方の端でこれを好きなように解釈できると考えるのは正しいですか?