我需要一种方法将字符串“IP:PORT”转换为字节数组。我知道如何手动格式化,但我需要一种自动完成的方法。
示例IP:
77.125.65.201:8099
我只是不能使用“”.getBytes();因为我需要以下格式(没有点和冒号):
[#1 octet ip] [#2 octet ip] [#3 octet ip] [#4 octet ip] [#1 2 octet port]
为了更好地理解:
77 125 65 201 8099
在Java中手动我可以设置它:
byte[] testIP = { 0x4D, 0x7D, 0x41, (byte)0xC9, (byte)0x1FA3 };
我需要找到一个方法,它将以正确的格式返回一个字节数组,在必要时(由于Java签名字节)转换为字节。
这就是我所做的,但它不起作用:
private void parseIp(String fullData){
String[] data = fullData.split(":"); // 8099
String[] ip = data[0].split("\\."); // 77 | 125 | 65 | 201
for(int i = 0; i < 4; i++){
System.out.println("---> " + toHex(ip[i]));
}
}
private String toHex(String data){
return Integer.toHexString(Integer.parseInt(data, 16));
}
答案 0 :(得分:4)
Java中有一个特殊的包来处理互联网地址java.net,使用它。
String s = "77.125.65.201:8099";
String[] a = s.split(":");
InetAddress ia = InetAddress.getByName(a[0]);
byte[] bytes = ia.getAddress();
int port = Integer.parseInt(a[1]);
答案 1 :(得分:2)
private String parseAddressToHex(String address) {
int result = 0;
String[] str = address.split("\\.");
for (int i = 0; i < str.length; i++) {
int j = Integer.parseInt(str[i]);
result = result << 8 | (j & 0xFF);
}
return Integer.toHexString(result);
}
答案 2 :(得分:1)
用这个替换你的函数toHex。
private String toHex(String data){
return Integer.toHexString(Integer.parseInt(data));
}
答案 3 :(得分:1)
这就是导致你问题的地方是转换为字节,你实际上根本不需要使用“hex”。您真正需要做的就是将1-3位十进制数转换为字节,将1-5位十进制数转换为一对字节:例如
private byte[] parseIp(String fullData){
String[] data = fullData.split(":");
String[] ip = data[0].split("\\.");
byte[] res = new byte[6];
for(int i = 0; i < 4; i++){
res[i] = (byte) Integer.parseInt(ip[i]);
}
port = Integer.parseInt(data[1]);
res[4] = (byte)((port >> 8) & 0xff);
res[5] = (byte)(port & 0xff);
return res;
}
(上面需要一些错误检查......)
答案 4 :(得分:0)
您可以使用我复制的代码:Convert a string representation of a hex dump to a byte array using Java?
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
答案 5 :(得分:-1)
//
// 27.04.2013 16:26:32
//
public class ipconvert {
private static void parseIp(String fullData){
String[] data = fullData.split(":"); // 8099
String[] ip = data[0].split("\\."); // 77 | 125 | 65 | 201
System.out.println();
System.out.print("---> " + toHex(ip[0]));
for(int i = 1; i < 4; i++){
System.out.print("."+toHex(ip[i]));
}
System.out.println(":"+data[1]);
}
private static String toHex(String data){
return Integer.toHexString(Integer.parseInt(data, 16));
}
public static void main(String[] args) {
String stest;
System.out.println("SO tests");
System.out.println();
stest = new String("77.125.65.201:8099");
parseIp ( stest );
System.out.println();
return;
}
}