FileReader试图读取十六进制数,java

时间:2017-03-08 09:22:18

标签: java file hex sublimetext filereader

我有一个我想读入我的java项目的文件。它包含十六进制数据。我所拥有的文件没有文件扩展名,这就是我必须使用它的原因,因为该程序将如何接收文件。

我知道我有正确的文件,因为在Sublime Text中它会像这样打开。

http://i.imgur.com/iF3iX68.png

很好,十六进制。 ...但是在Gedit中打开相同的文件...

http://i.imgur.com/Vf5Hyc6.png

完全混乱。当我尝试按照我知道的方式打开项目中的文件时,

try (BufferedReader br = new BufferedReader(new FileReader(url))) {
    while ((line = br.readLine()) != null) {
        byte[] sj = line.getBytes();
        char[] charLine = new char[line.length()];
        line.getChars(0, line.length(), charLine, 0);
    }
} (catch and stuff below)

获取一个类似于

的字节数组
525 = -65
526 = -67
527 = 15
528 = -17
529 = -65
530 = -67
531 = 15
532 = -17
533 = -65
在一个不应该能够得到负数的系统中

等等。在我的char数组......

525 = '\u000F' 15
526 = '�' 65533
527 = '\u000F' 15
528 = '�' 65533
529 = '\u000F' 15
530 = '�' 65533
531 = '\u000F' 15
532 = '\u0003' 3
533 = '\u0010' 16

char数组中只有15的值有时是字节数组中的-65,有时是15,并且它们都不像sublime文件中的十六进制数。我知道每个字节/字符代表sublime文件中的两个符号,但是......是的。

老实说,我很难过。如何正确读取此文件中的十六进制数字?就像Sublime如何打开它一样?

1 个答案:

答案 0 :(得分:0)

我编写了一行代码,将一行十六进制转换为整数数组,所以我认为这就是你想要的。 在shotrt中 - 代码从文件中获取一行文本,您在第一张照片上显示并修剪为十六进制值作为一个strin然后分割为字符串数组并解码有符号的Integer值并返回整数数组。我已经测试了代码manualy所以下面有main()。抱歉languange byt hen你看到这篇文章的时间你将会失败:) - 01:00 AM:)

import java.util.Arrays;

    /**
     * Created by maciej.brzozowski.83@gmail.com on 2017-04-03 01:00AM.
     */
    public class hexDecoder {



        public  int[] decode(String inputString){
            inputString= inputString.substring(inputString.indexOf(" "));
            inputString= inputString.trim();
            String hexArray[] = inputString.split(" ");
            int[] intValuesOfHex = new int[hexArray.length];
            for (int i = 0; i <hexArray.length ; i++) {
              intValuesOfHex[i]=Integer.valueOf(hexArray[i],16);
              }

        return intValuesOfHex;
        }

        public static void main(String[] args) {
           String hexToDecode = "33  c60f cc0f d20f d80f de0f e407 ea0f f10f";
            System.out.println(Arrays.toString(new hexDecoder().decode(hexToDecode)));
        }

    }