2016-02-01 100 views
1
import java.lang.*; 

public class asciiHex{ 
    public static void main(String args[]){ 
     String ascii1 = "e v e r y s e c o n d c h a r"; 
     String hex = ""; 
     String ascii2 = ""; 
     char[] chars = ascii1.toCharArray(); 

     for(int i = 0; i < ascii1.length(); i++){ 
      hex += (Integer.toHexString((int)chars[i])); 
     } 

     System.out.println(ascii1); 
     System.out.println(hex); 

     for(int i = 0; i < hex.length(); i+=2){ 
      String temp = hex.substring(i, i+=2); 
      ascii2 += ((char)Integer.parseInt(temp, 16)); 
     } 

     System.out.println(ascii2); 
    } 
} 

這是我的代碼。它應該採取一個字符串,並將其從ascii轉換爲十六進制,然後返回。當我運行這個程序的時候,它會以某種方式失去每一個字符。我很確定這是使用子字符串的一個問題,但我不明白它爲什麼會這樣。在十六進制和ASCII之間轉換時丟失字符

謝謝。

+0

您不需要執行'import java.lang。*'。 'java.lang'中的所有內容默認導入 – sshashank124

回答

3

你增加你的計數器(i)的兩倍,這就是爲什麼它會跳過第二個字符:

for(int i = 0; i < hex.length(); i+=2){  // <-- first increment 
    String temp = hex.substring(i, i+=2); // <-- second increment 
    ascii2 += ((char)Integer.parseInt(temp, 16)); 
} 

應該是:

for(int i = 0; i < hex.length(); i+=2) { // <-- increment here 
    String temp = hex.substring(i, i+2); // <-- do not increment here 
    ascii2 += ((char)Integer.parseInt(temp, 16)); 
} 
+0

真棒,謝謝。這就像i ++和i + 1的區別嗎? – user3364161

+0

就是這樣。 –

2

您有2種情況下,您都做i+=2。 In for loop for(int i = 0; i < hex.length(); i+=2),以及子串String temp = hex.substring(i, i+=2);。 使String temp = hex.substring(i, i+2);使其按預期工作。

相關問題