2014-04-24 143 views
1

我有一個包含了「捕獲的網絡數據包頭」爲這樣的十六進制值的文本文件...如何將字符轉換爲Java中的字符串?

FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00. 

我需要將它們轉換爲十進制值...我沒有少在這裏..

InputStream input = new FileInputStream("data.txt"); 
OutputStream output = new FileOutputStream ("converteddata.txt"); 
int data = input.read(); 
while (data != -1) 
{ 
    char ch = (char) data; 
    output.write(ch); 
    data=input.read(); 
} 
input.close(); 
output.close(); 

現在,我的問題是...如何獲得每個將有'2'字符的十六進制字符串..? (如「AD」或5F等,以便將它們轉換爲十進制值)。

我知道C++有一個函數「fgetc()」No ..?我需要類似的解決方案任何人都可以提出一個好方法..? (對不起,我是Java的初學者,但知道C++好得多) 在此先感謝。

回答

0

這裏是一個示例代碼。請優化實時使用。

public static void main(String[] args) throws IOException { 
     OutputStream output = new FileOutputStream ("converteddata.txt"); 
     BufferedReader br = new BufferedReader(new FileReader(new File("data.txt"))); 
     String r = null; 
     while((r=br.readLine())!=null) { 
      String [] str = r.split("-"); 
      for (String string : str) { 
       Long l = Long.parseLong(string.trim(), 16); 
       output.write(String.valueOf(l).getBytes()); 
       output.write("\n".getBytes()); 
      } 

     } 
     br.close(); 
     output.close(); 

    } 
+0

謝謝先生......但是,我們可以保留連字符「 - 」而不分裂它嗎?因爲我執行後,字符串變成這樣... 2522001519813695116222432001992298069004182199640128617511719216813 – Maharan

+0

當然.. \t output.write(String.valueOf(l).getBytes()); output.write( 「 - 」 的getBytes()); – Hirak

+0

哦..是的...它工作。再次感謝先生..! – Maharan

1

嘗試Long.parseLong("<hex string>", 16);將十六進制字符串轉換爲long值。

+0

爲什麼不'的Integer.parseInt(「十六進制串」,16)'在這種情況下,給出的字符串不能高於255 – kai

+0

@kai既會工作,在這種情況下,你說得對,串不能高於255,但對於其他可能解析更大的十六進制字符串的人,我覺得這會更通用且更實用。感謝您的提醒! – manan

+0

是的,先生...這是一個「簡單的解決方案」...謝謝..! – Maharan

1

試試這個:

String strHex = "FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00"; 

String[] hexParts = strHex.split("-"); 


for (String myStr : hexParts) { 

    // System.out.println(toHex(myStr)); 
    System.out.println(toDecimal(myStr)); 
} 


// getting For Decimal values from Hex string 
public int toDecimal(String str){ 
    return Integer.parseInt(str.trim(), 16); 
} 

// getting For Hex values 
public String toHex(String arg) { 
    return String.format("%x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/))); 
} 
+0

我已經編輯了十進制值的答案。 –

+0

它也工作主席先生......但我剛剛初始化「String strHex」作爲一個NULL值...因爲這是一個「包頭」,在該文件中重複出現。謝謝..! – Maharan

+0

oK比你可以在運行時更新strHex的值並使用它。 –

相關問題