1

文字列「IP:PORT」をバイト配列に変換するメソッドが必要です。手動でフォーマットする方法は知っていますが、自動的にフォーマットする方法が必要です。

IP の例:

77.125.65.201:8099

"".getBytes(); を使用できません。次の形式が必要なため(ドットとコロンなし):

[#1 オクテット ip] [#2 オクテット ip] [#3 オクテット ip] [#4 オクテット ip] [#1 2 オクテット ポート]

理解を深めるために:

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));
}
4

6 に答える 6

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);
}
于 2016-07-29T07:31:59.643 に答える
1

関数 toHex をこれに置き換えます。

private String toHex(String data){
   return Integer.toHexString(Integer.parseInt(data));
}
于 2013-04-27T14:43:20.767 に答える
1

ここで問題を引き起こしているのは、バイトに変換することです。実際には「16進数」を使用する必要はまったくありません。実際に行う必要があるのは、1 ~ 3 桁の 10 進数をバイトに変換し、1 ~ 5 桁の 10 進数をバイトのペアに変換することだけです。

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

(上記にはエラーチェックが必要です...)

于 2013-04-27T14:54:23.663 に答える
0

私がコピーしたこのコードを使用できます: Java を使用して 16 進ダンプの文字列表現をバイト配列に変換しますか?

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;
}
于 2013-04-27T14:22:01.910 に答える