我想知道这个解决方案是否记录了 here仍然是解决方案还是有任何其他方法从 4 个字节获取 int?
谢谢。
编辑:我从 sockets .read 获取 byte[]
编辑:int recvMsgSize = in.read(Data, 0, BufferSize);
如果 recvMsgSize 为 -1,我知道连接已断开。
当我使用 DataInputStream 而不是 InputStream 时如何检测到这个?
谢谢。
编辑:为接受正确答案而成为溜溜球而道歉。但在 mihi 更新最终回复后,该方法似乎是可靠的并且减少了扩展编码,在我看来是最佳实践。
最佳答案
您必须非常小心地进行任何扩大转换和数字提升,但下面的代码将 4 byte
转换为 int
:
byte b1 = -1;
byte b2 = -2;
byte b3 = -3;
byte b4 = -4;
int i = ((0xFF & b1) << 24) | ((0xFF & b2) << 16) |
((0xFF & b3) << 8) | (0xFF & b4);
System.out.println(Integer.toHexString(i)); // prints "fffefdfc"
另见
- Java code To convert byte to Hexadecimal
- 注意使用
& 0xFF
进行屏蔽的必要性——如果您正在使用byte
,您可能最终会做很多这样的事情,因为所有算术操作提升为int
(或long
)
- 注意使用
关于Java 将 4 个字节转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840190/