Java 无法获得正确的变量值

Java can't get right values for vars

我正在构建一个从 quake 3 引擎主服务器(在本例中为 cod2 主服务器)检索服务器列表的工具。 这些主服务器响应一个包含 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 个字符翻译正确

��zH << 这是一个不正确的,我无法从我的控制台复制正确的符号,如果我将它写入 txt 文件,我会在每个文本编辑器中得到完全不同的结果,所以你..

有什么解决办法吗?

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

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]