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