字符串为十六进制

时间:2013-04-27 14:11:54

标签: java string format ip hex

我需要一种方法将字符串“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));
}

6 个答案:

答案 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)

在让编译器开心(win7上的java se7u21-x64)后,你的代码对我来说就像魅力一样。这是独立的.java文件:

//
//  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;
    }
}