java - 需要将 4 个字节的数组转换为 int

标签 java int bytearray type-conversion

我正在尝试制作一个可靠的 UDP 系统,我需要将 byte[] 转换为 int 并返回 (JCreator 5.0 LE)

DatagramPacket 需要 byte[] 形式的数据,因此我必须将 int 信息转换为 byte[] 以便发送:

byte[] data = new byte[48];

System.arraycopy(task.getProtocol().byteValue(), 0, data, 0, task.getProtocol().byteValue().length);
System.arraycopy(task.getMessage().byteValue(), 0, data, 4, task.getMessage().byteValue().length);
System.arraycopy(task.getSequence().byteValue(), 0, data, 8, task.getSequence().byteValue().length);
System.arraycopy(task.getAcknowledge().byteValue(), 0, data, 12, task.getAcknowledge().byteValue().length);

for (int i = task.getAcknowledge(); i >= 0 && i > task.getAcknowledge() - 33; i--) {

    for (Packet j: tasks) {

        if (j.getSequence() == i) {

            data[i] = 1;
            break;

        }

    }

}

out = new DatagramPacket(data, data.length, ds.getInetAddress(), portNum);
ds.send(out);

协议(protocol)就是协议(protocol)ID

消息是正在发送的“信息”

Sequence 是数据包的序号;发送的第一个数据包序列为0,下一个为1,依此类推

Acknowledge是对一个数据包被发回的确认

下一部分是其他 32 条致谢。为了节省内存,它们被压缩成每个1字节而不是4字节(int)

现在,当我收到数据包时,我需要将其解包。首先我需要检查前 4 个字节(协议(protocol))以查看我是否会忽略该数据包,但我不知道如何将字节数组转换为 int。

最佳答案

你可以使用

ByteBuffer bb = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN or BIG_ENDIAN);
bb.position(pos);
int n = bb.getInt();

关于java - 需要将 4 个字节的数组转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464878/

相关文章:

java - 无法在 Linux Java 上识别 CRLF

PHP 在不使用解包的情况下将主体读入字节数组

java - 运行时错误阻止我的待办事项应用程序启动

java - 如何用空格拆分字符串并将任何内容单独留在引号内?

java - 将 5 个字节转换为整数

java - 如何在数学方程中使用字符串变量名称?

c - 如何在c中将2D char数组转换为2D int

c++ - 整数环绕?

Java:byte[] 数组到 Excel 到 BLOB

java - 使用 HTTP 客户端的 Kerberos 连接