2011-06-14 134 views
4

作为较大程序的一部分,我需要读取十六进制文件中的值并打印十进制值。 它似乎工作正常;但是,所有范围从80到9f的十六进制值都会给出错误的值。 例如80十六进制给出一个十进制值8364 请帮忙。Java阅读十六进制文件

这是我的代码:

String filename = "pidno5.txt"; 
FileInputStream ist = new FileInputStream("sb3os2tm1r01897.032");  
BufferedReader istream = new BufferedReader(new InputStreamReader(ist)); 
int b[]=new int[160];  
for(int i=0;i<160;i++) 
    b[i]=istream.read(); 
for(int i=0;i<160;i++) 
    System.out.print((b[i])+" "); 
+1

只是为了术语:你是不是读** hex文件**(这将是包含ASCII编码的十六进制数据的文件?),但**二进制文件**。 – 2011-06-14 11:58:34

回答

7

如果你试图读取原始字节,这不是你在做什么。

您正在使用Reader,它读取字符(在您未指定的编码中,因此它默认为某种东西,也许是UTF-8)。

要读取字节,请使用InputStream(并且不要将其包装在Reader中)。

+0

谢谢,它与Inp​​utStream一起工作 – 2011-06-14 11:45:20

+1

默认编码可能是一些Microsoft代码页,因为它们中的一些在代码点0x80上有€符号,然后映射到Unicode 8364。 – jarnbjo 2011-06-14 12:30:46

0

您也可以使用不同的编码:

BufferedReader istream = new BufferedReader(new InputStreamReader(ist, "ISO-8859-15"));