在hex和ascii之间转换时丢失字符

时间:2016-02-01 04:57:07

标签: java hex ascii

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转换为十六进制,然后再返回。当我运行程序时,它会以某种方式丢失每一个字符。我很确定这是我使用子串的方式有问题,但我不明白为什么它会这样做。

感谢。

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:2)

您有2个实例已完成i+=2。 在for循环for(int i = 0; i < hex.length(); i+=2)中,也在子串String temp = hex.substring(i, i+=2);中。 让String temp = hex.substring(i, i+2);使其按预期工作。