2011-06-14 104 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"));