以十六进制的形式阅读Java

时间:2011-01-16 02:43:53

标签: java hex

我试图解决这个问题,但我一直在提出一些没有帮助的东西我确信这很容易(当你知道当然如何;)

我想要做的是使用如下字节流读取文件:

while((read = in.read()) != -1){

       //code removed to save space

       Integer.toHexString(read);
System.out.println(read);

}

当它将十六进制打印到屏幕时,它会打印出数字,例如 31 13 12 0

但是当谈到应该是01 31的十六进制代码时,它将打印0 131.我想将它读入一个变量,就像你在十六进制编辑器中看到的那样,即00 11 21 31我没需要单个数字扫描整个文件并查找我知道该怎么做的模式我只是坚持这个:/

所以总之我需要一个变量来包含两个十六进制字符,即int temp = 01而不是int temp = 0,我希望这一切都有意义,我有点困惑,因为它是凌晨3点!

如果有人知道如何做到这一点我会非常感激,请帮助提前帮助这个网站为我节省了大量的研究并且学到了很多东西!

非常感谢。

4 个答案:

答案 0 :(得分:5)

此方法:

public static void printHexStream(final InputStream inputStream, final int numberOfColumns) throws IOException{
    long streamPtr=0;
    while (inputStream.available() > 0) { 
        final long col = streamPtr++ % numberOfColumns;
        System.out.printf("%02x ",inputStream.read());
        if (col == (numberOfColumns-1)) {
            System.out.printf("\n");
        }
    }
}

将输出如下内容:

40 32 38 00 5f 57 69 64 65 43 
68 61 72 54 6f 4d 75 6c 74 69 
42 79 74 65 40 33 32 00 5f 5f 
69 6d 70 5f 5f 44 65 6c 65 74 
65 46 69 6c 65 41 40 34 00 5f 
53 65 74 46 69 6c 65 50 6f 69 
6e 74 65 72 40 31 36 00 5f 5f 
69 6d 70 5f 5f 47 65 74 54 65 
6d 70 50 61 74 68 41 40 38 00 

这是你在找什么?

答案 1 :(得分:1)

我认为你要找的是格式化程序。尝试:

Formatter formatter = new Formatter();
formatter.format("%02x", your_int);
System.out.println(formatter.toString());

这样做你正在寻找什么?你的问题并不是那么明确(我想也许你从你的代码段中删除了太多的代码)。

答案 2 :(得分:1)

大家好,所有人都发布了,感谢您的回复,但我这样做的方式是:

                        hexIn = in.read();
                        s = Integer.toHexString(hexIn);
                        if(s.length() < 2){
                            s = "0" + Integer.toHexString(hexIn);
                        }

以为我会发布他们的方式我将来会为其他人做这件事,非常感谢你们的帮助!

答案 3 :(得分:1)

import org.apache.commons.io.IOUtils;
import org.apache.commons.codec.binary.Hex;

InputStream is = new FileInputStream(new File("c:/file.txt"));
String hexString = Hex.encodeHexString(IOUtils.toByteArray(is));

在java 7中,您可以直接从文件中读取字节数组,如下所示:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;

Path path = Paths.get("path/to/file");
byte[] data = Files.readAllBytes(path)