English 中文(简体)
将其转换为 Java 中的字节数组后分析数据 GrmaPacket
原标题:Parse a DatagramPacket after converting it to a byte array in Java

我试图解析一个在套接字处会收到的数据gragPacket。我知道我将收到的包的格式,这是一个 DHCPREQUEST 包,但我认为这并不重要。为了简单起见,让我们考虑前六个字段:

First field is the "opcode", which is 1 byte.
Second field is the "hardware type" which is 1 byte.
Third, "hardware address length", 1 byte.
Fourth, "hops", 1 byte.
Fifth, "transaction identifier xid", 4 bytes.
Sixth, "seconds", 2 bytes.

收到包裹后,我的方法是把它转换成字节阵列。

DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
byte[] buf = request.getData();

在此点, 包将存储在字节数组 < code> buf 中, 以一系列字节形式 。 既然我知道这个字节序列的结构是什么, 我如何解析它? 单字节字段足够简单, 但是多位位域如何? 例如, 我如何提取 4 到 7 字节, 并将其存储在名为 < code> xid 的变量中?

我可以手动把每个字节都放入一个阵列:

byte[] xid = new byte[4];
xid[0] = buf[4];
xid[1] = buf[5];
xid[2] = buf[6];
xid[3] = buf[7];

但对于长数百字节的字段来说,这实在是乏味和不切实际。 字符串类可以分析给定的偏移和长度; Java 的字节阵列是否有类似的方法?

还是我让事情变得困难了?

最佳回答

最清洁的方法就是使用实用方法