2015-07-19 69 views
0

需要在通過索引訪問時解碼數組中的十六進制代碼。用戶應輸入數組索引並獲得已解碼的十六進制數組作爲輸出。如何解碼java中的數組中的十六進制代碼

import java.util.Scanner; 

    class Find { 

    static String[] data={ " \\x6C\\x65\\x6E\\x67\\x74\\x68", 
         "\\x73\\x68\\x69\\x66\\x74" 

          //....etc upto 850 index 

         }; 

    public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    System.out.println("Enter a number"); 

    int s = in.nextInt(); 

    String decodeinput=data[s]; 

          // need to add some code here 
          //to decode hex and store to a string decodeoutput to print it 

    String decodeoutput=...... 

    System.out.println(); 
              } 
       } 

如何使用......

   String hexString ="some hex string";  

       byte[] bytes = Hex.decodeHex(hexString .toCharArray()); 

       System.out.println(new String(bytes, "UTF-8")); 
+0

一些言論:在Java中,類總是先從一個大寫字母和變量AR在[駝峯](HTTPS writtein:// EN .wikipedia.org/wiki/CamelCase)和'[]'應該寫在類型後面,而不是名稱後面(所以'String args []'變成'String [] args')。如果你想要人們回答你的問題,你可能想要格式化你的代碼(關於上面的評論以及代碼縮進)。 – Turing85

+0

ok..thax for the remark @ Turing85 –

+0

[請不要在您的問題上或回答上說「謝謝」](http://stackoverflow.com/help/someone-answers) – Turing85

回答

1

追加下面的代碼從用戶獲得S的值之後。 Imp:如上所述,請使用camelCase約定來命名變量。我剛剛開始使用,並且使用了與現在相同的名稱。

if (s>= 0 && s < data.length) { 
      String decodeinput = data[s].trim(); 

      StringBuilder decodeoutput = new StringBuilder(); 

      for (int i = 2; i < decodeinput.length() - 1; i += 4) { 
       // Extract the hex values in pairs 
       String temp = decodeinput.substring(i, (i + 2)); 
       // convert hex to decimal equivalent and then convert it to character 
       decodeoutput.append((char) Integer.parseInt(temp, 16)); 
      } 
      System.out.println("ASCII equivalent : " + decodeoutput.toString()); 
    } 

OR,只要完成你在做什麼:

/*  import java.io.UnsupportedEncodingException; 
     import org.apache.commons.codec.DecoderException; 
     import org.apache.commons.codec.binary.Hex; //present in commons-codec-1.7.jar 
*/ 
     if (s>= 0 && s < data.length) { 
      String hexString =data[s].trim(); 
      hexString = hexString.replace("\\x", ""); 
      byte[] bytes; 
      try { 
       bytes = Hex.decodeHex(hexString.toCharArray()); 
       System.out.println("ASCII equivalent : " + new String(bytes, "UTF-8")); 
      } catch (DecoderException e) { 
       e.printStackTrace(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 
+0

解決方案當我使用 'Hex.decodeHex(hexString .toCharArray());' 我得到了一個錯誤。是否有任何需要導入特殊的包爲Hex.decodehex @ user403348255 –

+1

是的,如上面代碼的註釋部分所示:import org.apache.commons.codec.binary.Hex; //存在commons-codec-1.7.jar。你將不得不下載jar並將它添加到你的classpath中。 –