2013-01-02 75 views
1

我想在文本區域中取一個二進制文件並將其轉換爲十六進制。使用計算器計算時,結果爲「E0AC882AA428B6B8」,但代碼結果爲「30」。從文本區域取二進制文件,然後轉換爲十六進制

String str = txtXOR.getText(); 
char[] chars = str.toCharArray(); 

StringBuffer hex = new StringBuffer(); 
int x = chars.length; 

for(int i = 0; i < x; i++){ 
    hex.append(Integer.toHexString((int)chars[i])); 
    txtXORToHexa.setText(Integer.toHexString((int) chars[i])); 
} 

有人能指出我出錯的地方嗎?

+1

可能的重複http://stackoverflow.com/questions/5759999/translating-a-string-containing-a-binary-value-to-hex – sunleo

+0

你試圖將每個二進制數字轉換爲它的Hex等效。您必須將整個數字集合作爲整數。 – asgs

+0

可能重複的[轉換十六進制到一個二進制字符串在java中](http://stackoverflow.com/questions/9246326/convert-hex-to-a-binary-string-in-java) – DocMax

回答

3

你應該使用Integer#parseInt(String s, int radix)與基地2分析二進制字符串,然後用toHexString得到十六進制字符串:

String binaryStr = txtXOR.getText(); 
int number = Integer.parseInt(binaryStr, 2); 
String hexStr = Integer.toHexString(number); 
txtXORToHexa.setText(hexStr); 

如果你必須支持非常大的數字,你可以使用BigInteger

String binaryStr = txtXOR.getText(); 
BigInteger number = new BigInteger(binaryStr, 2); 
String hexStr = number.toString(16); 
txtXORToHexa.setText(hexStr); 
+1

謝謝Aviram,如果二進制值很短,代碼有效,但是如果二進制值很長,會出現錯誤信息錯誤:對於輸入字符串:例如「1101100011100100110110001101010011001100110100001101110011010100」,我嘗試用Long.parseLong(str,2)替換;但仍然錯誤, – irwansyahazniel

+0

編輯與大數解決方案 –

+0

哇,它的作品,現在,我可以去下一步的施工方案,我真的很喜歡這個論壇,我的問題得到了很快回答, 非常感謝Aviram Segal – irwansyahazniel

相關問題