意思就是编码后产生的字符串长度是6。现有的比如base64,编码后长度不能指定为6.
因此需要是自己实现的,想了很久,实在觉得蛋疼。

解决方案 »

  1.   

    意思就是编码后产生的字符串长度是6。现有的比如base64,编码后长度不能指定为6.
    因此需要是自己实现的,想了很久,实在觉得蛋疼。自己实现没那么简单吧
      

  2.   

    转成长度为6的字符串是转不了。
    但是能够转成长度为6的byte数组。
    分析:
    IP地址以"."分隔为4个单元,则每个单元为0-255范围. 使用一个字节即可表示
    端口号地址为0-65535, 使用两个字节可表示.
    如果使用6位编码,前4位表示IP地址,后2位表示端口号则6个byte完全可以表示出来。
    故IP+端口可使用6byte表示.
    示例代码如下:import java.util.StringTokenizer;
    /**
     * @author ZYB
     * @date Feb 25, 2014 3:20:17 PM<BR/>
     */
    public class CompressIpAddress { /**
     * @author ZYB
     * @date Feb 25, 2014 3:20:17 PM<BR/>
     * @param args
     */
    public static void main(String[] args) {
    String[] ips = new String[]{"192.168.0.1:8080", "255.255.255.0:32", "200.38.24.129:64543"};
    byte encodedIpArr[][] = new byte[ips.length][];
    for(int i = 0; i < ips.length; i++){
    encodedIpArr[i] = encode(ips[i]);
    System.out.print(ips[i]+"/");
    printByteArray(encodedIpArr[i]);
    }
    for(int i = 0; i < ips.length; i++){
    String decoded = decode(encodedIpArr[i]);
    System.out.println(ips[i]+"/" + decoded);
    }
    }

    public static void printByteArray(byte[] array){
    System.out.print(array[0]);
    for(int i = 1; i < array.length; i++){
    System.out.print("," + array[i]);
    }
    System.out.println();
    }

    public static byte[] encode(String ipAddress){
    int portIndex = ipAddress.indexOf(":");
    String portStr, ipStr;
    if(portIndex >= 0){
    portStr = ipAddress.substring(portIndex + 1);
    ipStr = ipAddress.substring(0, portIndex);
    }else{
    portStr = "0";
    ipStr = ipAddress;
    }
    byte[] result = new byte[6];
    int port = Integer.parseInt(portStr);
    StringTokenizer st = new StringTokenizer(ipStr, ".");
    int index = 0;
    while(st.hasMoreTokens()){
    result[index] = (byte) (0xff & Integer.valueOf(st.nextToken()));
    index++;
    }
    result[4] = (byte) (port>>8 & 0xff);
    result[5] = (byte) (port & 0xff);
    return result;
    } public static String decode(byte[] encodedIp){
    assert encodedIp.length == 6;
    StringBuilder sb = new StringBuilder();
    sb.append(encodedIp[0]&0xff).append('.')
    .append(encodedIp[1]&0xff).append('.')
    .append(encodedIp[2]&0xff).append('.')
    .append(encodedIp[3]&0xff).append(':');
    int port = (0xff & encodedIp[4])<<8 | (0xff & encodedIp[5]);
    sb.append(port);
    return sb.toString();
    }
    }
      

  3.   

    192,168,004,101,08080,45long num = 1921680041010808045L;把这个10进制转64进制,结果是11位  想转6位是不可能的