我收到一个 UDP 数据包(我不知道哪种格式,我认为是 UTF-16 -little endian-),我只知道以下文档。直接从开发者页面:
每个主服务器通过发送 FF FF FF FF 73 0A 后跟(相对)唯一的 4 字节“挑战”号来响应。
所以这就是我接收数据包的方式:
byte[] buff = new byte[64];
DatagramPacket packet = new DatagramPacket(buff, buff.length);
socket.receive(packet);
数据包已收到,一切正常,但现在我被卡住了。我需要那个 4 字节整数。我必须拆分缓冲区,否则……我不知道该怎么办。
这是接收到的数据:
˙˙˙˙s
Ň?t
我尝试转换为十六进制,但输出非常有趣:
-0000000000000000000000000008cf52df7c08c
转换方法:
public String toHex(String arg) throws UnsupportedEncodingException {
return String.format("%040x", new BigInteger(arg.getBytes("UTF-16LE")));
}
比我尝试将十六进制转换为字符串(从上面的方法),结果更有趣(对不起,我不能复制粘贴,出了点问题),无论如何用于将十六进制转换为字符串的方法是:
public String hexToString(String hex){
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
String str = hex.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
return new String(output);
}
所以说了这么多,我被困住了。我不知道我该怎么做。我需要将 UDP 数据包分割成碎片还是……?