我正在尝试解析我将在套接字处收到的 DatagramPacket。我知道我将收到的数据包的格式,即 DHCPREQUEST 数据包,但我认为这并不重要。为简单起见,我们只考虑前六个字段:
第一个字段是“操作码”,它是 1 个字节。
第二个字段是 1 个字节的“硬件类型”。
三、“硬件地址长度”,1字节。
四、“跳”,1个字节。
五、“交易标识xid”,4字节。
第六,“秒”,2个字节。
收到数据包后,我的方法是将其转换为字节数组。
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
byte[] buf = request.getData();
此时,数据包buf
作为一系列字节存储在字节数组中。既然我知道这个字节序列的结构是什么,那我该如何解析呢?一字节字段很简单,但是多位字段呢?例如,我如何提取字节 4 到 7,并将它们存储在名为的变量中xid
?
我可以手动将每个字节放入一个数组中:
byte[] xid = new byte[4];
xid[0] = buf[4];
xid[1] = buf[5];
xid[2] = buf[6];
xid[3] = buf[7];
但这对于数百字节长度的字段来说非常乏味且不切实际。String 类可以解析给定偏移量和长度的子字符串;Java中的字节数组有类似的方法吗?
还是我以某种方式让自己变得困难?