Java 按位右移 255 为字节值

标签 java bit-manipulation

我有一个短计数器,它会递增并用作标识符。我需要在网络套接字上将标识符作为二进制数据发送。

因此,如果我有一个短值,我可以这样做以将其“打包”为两个字节:

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发送,那么在另一端它可以根据需要解释它?

最佳答案

是的,你的想法是对的。

仅供您引用:有一个非常好的类(class)可以为您完成此操作。它被称为DataInputStreamDataOutputStream .

Socket socket = ...;
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

/* Write a short */
short out = 255;
dos.writeShort(out);

/* Read a short */
short in = dis.readShort();

关于Java 按位右移 255 为字节值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12662988/

相关文章:

c - C 中按位运算符的性能

c++ - 将设置位移动到 64 位整数的末尾

JavaScript:将 52 位整数转换为 20 位和 32 位整数

JAVA 为每个数组索引设置键

java - 如何允许我的 Maven 插件访问使用它的项目的资源?

Java - 有关使用 "split()"的帮助

java - 如何在java中将txt行复制到ArrayList中?

java - Android内部存储读取文件

c++ - 位窗口操作

c - 如何使用 C 在不影响其他位的情况下替换位域中的位