在java中读取hex文件并将其转换为ascii

时间:2013-10-30 09:59:39

标签: java hex ascii

早上好,我有一个严重的问题。 我需要读取十六进制文件并将其转换为ascii。 我还需要在另一个文件上写ascii。 我试过了:

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws FileNotFoundException, IOException {
    FileInputStream in = new FileInputStream("fileAscii");
    int read;
    String hex = "";
    int count = 0;
    String valueRead="";
    PrintWriter writer= new PrintWriter("fileOutput");

    while ((read = in.read()) != -1) {
        count++;
        valueRead= Integer.toHexString(read);
        if(valueRead.length()==1){
            hex=hex+"0";
        }
        hex = hex + valueRead;
        if (is16Multipler(count)) {

            System.out.println(hex);
            String sb = "";
            StringBuilder temp = new StringBuilder();
            for (int i = 0; i < hex.length() - 1; i += 2) {

                //grab the hex in pairs
                String output = hex.substring(i, (i + 2));
                //convert hex to decimal
                int decimal = Integer.parseInt(output, 16);
                //convert the decimal to character
                sb=sb+(char) decimal;


            }
            if(!sb.equals("00000000000000000000000000000000"))
            {
               writer.println(sb.toString());
            }


               hex = "";
        }
    }
}


public static boolean is16Multipler(int number) {
    if (number % 16 == 0) {
        return true;
    }
    return false;
}

问题是我读错了值例如读取83 bat原始文件包含84

1 个答案:

答案 0 :(得分:3)

此代码将读取您输入的HEx文件并将其作为ASCII字符写入文件

public static void main(String[] args) throws FileNotFoundException, IOException {
        BufferedReader br = new BufferedReader(new FileReader("fileAscii")); // to read a single line from the file
        int read;
        String src= new String();       // to store the string obtained from buffered reader
        PrintWriter writer= new PrintWriter("fileOutput");
        src=br.readLine();              // read an input line from the file

        while(src!=null){
            src=src.replace(" ", "");   // Trim out the spaces
            for(int i=0;i<src.length();i+=2){
                read=Integer.parseInt(src.substring(i,i+2), 16);    // convert the String to hex integer 
                writer.print((char)read);                           // convert hex to char and write into file
            }
            src=br.readLine();
        }
        writer.flush();
    }