我需要解析一个文件,直接用记事本打开是如下乱码://——-----------------------------------------------
?e ?e
  鄮        
]
]?          ?en  %€  %€  %€                                                                                                                                                                                                                                                                                                                                                                               ((((AT                                        AT                                        AT                                        AT                                        
]
//---------------------------------------------------
用UltraEdit打开可以看到如下://----------------UltraEdit打开第一行-------------------------------
00000000h: AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF; ?.e.... .
//--------------------------------------------------
AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF; 这段是 16 进制码 我试过用JAVA读,但是只能读出  ?.e.... . 而  00000000h: AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF; 是读不出来的。把 AC 10 65 0A 翻译成10进制码为:172 16 101 10请问哪位大峡知道如何读出文件里面的内容 AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF 然后把他翻译成 10进制的内容呢?分不够可以再加,只要有人能解决。

解决方案 »

  1.   

    您这是什么 decompile 不过好象不是CLASS FILE
    关注ING
      

  2.   

    胆战心惊的写了一个,不知道是不是符合要求BufferedReader in = null;
    InputStreamReader ir = new InputStreamReader(KeyTest.class.getResourceAsStream("xxx"));
    in = new BufferedReader(ir);

    try {
    char[] line = in.readLine().toCharArray();

    System.out.println(line.length);

    for(int l:line){
    System.out.println(l);
    }
    } catch (IOException e1) {
    // TODO 自动生成 catch 块
    e1.printStackTrace();
    }
      

  3.   

    把 AC 10 65 0A 翻译成10进制码为:172 16 101 10
    这说明这个是不可显示的字符,
    请问哪位大峡知道如何读出文件里面的内容 AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF 然后把他翻译成 10进制的内容呢?
    ----------------------------------------------------------------------
    直接读出行来,然后强制类型转化成int就行了.
      

  4.   

    你好像是要解析WINDOWS应用程序啊?不行的,WINDOWS应用程序又不是一个个字符简单的变成了二进制文件,人家是一条条的指令(例如CPU的ADD指令的二进制是001,要解析它的话,就是如果指令段是001,那么把它变成add)和操作数.而用十六进制程序(或debug.exe)打开后格式是
    指令地址(000000H):指令(AC 10 65 0A 14 1E 03 FF FF FF FF 00 FF FF FF FF;):前面对应的内存状态(?.e.... .)
    所以一般来说,出现e这个字符只是一个偶然,当然如果你的Windows应用程序有定义某个内存为字符e,那就是必然了.例如:这是一个输出字符串的汇编程序:
    DATA SEGMENT
    STR DB 'THIS IS THE STR$'  ;//分配一个内存块,内容是THIS IS THE STR
    DATA ENDS
    STACK SEGMENT
    S DB 100 DUP(30H)  ;在内存里设置100个值为字符串'0'的内存块.作为堆栈
    STACK ENDS
    CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
    MOV AX,DATA
    MOV DS,AX
    MOV AH,09H
    MOV DX,OFFSET STR
    INT 21H    ;//输出那个字符串
    MOV AH,4CH
    INT 21H
    CODE ENDS
    END START编译成exe文件后,用十六进制文件打开:部分如下
    000200  54 48 49 53 20 49 53 20  54 48 45 20 53 54 52 24   THIS IS THE STR$
    000210  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000220  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000230  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000240  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000250  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000260  30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
    000270  30 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00   0000............
    000280  B8 00 00 8E D8 B4 09 BA  00 00 CD 21 B4 4C CD 21   ...........!.L.!
    其中最后一排的!和L是偶然的,前面的字符和0就不是偶然的.
      

  5.   

    又看到这个问题了.呵呵.原来你是想要取那个十六进制啊,很简单啊!不过你还是要把我刚刚说的看一下.程序如下:
    import java.io.*;
    public class ReadHex {
    public static void main(String[] args) throws Exception{
    FileInputStream fis=new FileInputStream("C:/a.exe");
    int counter=0;
    int line=0;
    int t=fis.read();
    while(t!=-1){
    if(counter==0){
    System.out.print("\n地址:"+line+"     ");
    line++;
    }
    System.out.print(Integer.toHexString(t));
    if(t<9) System.out.print("0");
    System.out.print(" ");
    t=fis.read();
    counter++;
    if(counter==16) counter=0;

    } }}
    结果:
    地址:0     4d 5a 90 00 20 00 10 00 20 00 00 00 ff ff 00 00
    地址:1     00 00 3b c7 00 00 80 00 1e 00 00 00 10 00 10 00
    地址:2     80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:3     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:4     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:5     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:6     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:7     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:8     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:9     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:10     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:11     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:12     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:13     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:14     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:15     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:16     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:17     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:18     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:19     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:20     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:21     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:22     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:23     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:24     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:25     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:26     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:27     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:28     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:29     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:30     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:31     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    地址:32     54 48 49 53 20 49 53 20 54 48 45 20 53 54 52 24
    地址:33     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:34     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:35     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:36     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:37     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:38     30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
    地址:39     30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00
    地址:40     b8 00 00 8e d8 b4 9 ba 00 00 cd 21 b4 4c cd 21
      

  6.   

    import java.io.*;
    public class ReadHex {
    public static void main(String[] args) throws Exception{
    FileInputStream fis=new FileInputStream("C:/a.exe");
    int counter=0;
    int line=0;
    int t=fis.read();
    while(t!=-1){
    if(counter==0){
    System.out.print("\n地址:"+line+" ");
    line++;
    }
    if(t<9) System.out.print("0");//应该把这一句放在前面,如果你想要int型,t就是你想要的
    System.out.print(Integer.toHexString(t));
    System.out.print(" ");
    t=fis.read();
    counter++;
    if(counter==16) counter=0;
    }
    }
    }