Java 无法为 var 获取正确的值



我正在构建一个工具,该工具从Quake 3 Engine Master Server(在这种情况下在COD2 Master Server)中检索服务器列表。这些主服务器使用包含IP端口信息的大字符串响应。其中的IP是4个字符,每个字符应转化为数字(1-255)。虽然,当我尝试这些数字时,以上128的数字转换为这个Unicode替换字符(65533或FFFD)。

我尝试了几件事:

System.out.println("ip: "+String.format("%02x", (int)r.charAt(i+1))+"."+String.format("%02x", (int)r.charAt(i+2))+"."+String.format("%02x", (int)r.charAt(i+3))+"."+String.format("%02x", (int)r.charAt(i+4)));
System.out.println("ip: "+(int)r.charAt(i+1)+"."+(int)r.charAt(i+2)+"."+(int)r.charAt(i+3)+"."+(int)r.charAt(i+4));

在PHP中,这一切都与功能相同的字符串起作用:

ord(char);

我认为问题可能是我的Java使用Unicode,我认为应该使用ASCII(或扩展ASCII,不确定)。

[8n]<<这4个字符翻译正确

rt;<<这是一个不正确的一个,我只是无法从控制台复制正确的符号,如果我将其写入txt文件,我会用每个文本编辑器获得完全不同的结果,所以是的。

有什么解决方案?

您可以使用 Byte.toUnsignedInt将字节直接转换为ints:

byte[] bytes = { (byte) 244, 12, 13, (byte) 155 }; // an example input
int[] ip = new int[4];
for(int i = 0; i < bytes.length; i++) {
    ip[i] = Byte.toUnsignedInt(bytes[i]);
}
System.out.println(Arrays.toString(bytes)); // [-12, 12, 13, -101]
System.out.println(Arrays.toString(ip)); // [244, 12, 13, 155]

最新更新