Java 将 4 个字节转换为 int

2022-09-03 09:00:23

我想知道这里记录的解决方案是否仍然是解决方案,或者有任何其他方法可以从4字节中获取int?

谢谢。

编辑:im从套接字中获取字节[].read

编辑:如果 recvMsgSize 是 -1 我知道连接已断开。int recvMsgSize = in.read(Data, 0, BufferSize);

当im使用DataInputStream而不是InputStream时,我如何检测到这一点?

谢谢。

编辑:为成为一名溜溜球而道歉,接受正确的答案。但是在mihi更新的最终响应之后,看起来这种方法是可靠的,并且减少了扩展编码,在我看来是最佳实践。


答案 1

您必须非常小心任何加宽转换和数字提升,但下面的代码将4转换为:byteint

    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"

另请参见


答案 2

如果数组中已有它们,则可以使用:byte[]

int result = ByteBuffer.wrap(bytes).getInt();

或者,如果你的类路径上有谷歌的番石榴库,你有快捷方式:

int result = Ints.fromByteArray(array);

其优点是,您可以为其他类型的(,等)提供类似的良好API。Longs.fromByteArrayShorts.fromByteArray


推荐