Java无法获得vars的正确值

时间:2017-02-16 11:04:42

标签: java char type-conversion ip string-conversion

我正在构建一个工具,它从地震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文件,我会得到与每个文本编辑器完全不同的结果,所以你们......

任何解决方案?

1 个答案:

答案 0 :(得分:2)

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

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]