2011-11-18 77 views
0

我有一個StringBuffer,strbuf=161656070200000000202020202001000000009E52;將StringBuffer轉換爲Java中的字節數組

我想轉換成字節數組,看起來像這樣:

byte[] byte_array=new byte[] 
{(byte)0x16,(byte)0x16,(byte)0x56,(byte)0x07, 
    (byte)0x02,(byte)0x00,(byte)0x00,(byte)0x00, 
    (byte)0x00,(byte)0x20,(byte)0x20,(byte)0x20, 
    (byte)0x20,(byte)0x20,(byte)0x01,(byte)0x00, 
    (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x9E,(byte)0x52}; 

我需要strbuf轉換爲hex字符串,然後做getBytes()? 這個問題的正確方法是什麼?

回答

8

您可以嘗試以下操作。

final String longHex = "161656070200000000202020202001000000009E52"; 
byte[] bytes = new BigInteger(longHex, 16).toByteArray(); 
System.out.println(Arrays.toString(bytes)); 

打印

[22, 22, 86, 7, 2, 0, 0, 0, 0, 32, 32, 32, 32, 32, 1, 0, 0, 0, 0, -98, 82] 
+0

感謝ü非常:)的 –

5

讓我們來分析這個問題了,和向後這裏工作。

你知道:

  • 如何將int轉換爲byte(假設前者是在範圍內)?
  • 如何將兩個字符String轉換爲int
  • 如何將長字符串轉換爲每個字符的兩個字符塊?

我懷疑你能夠單獨完成這些任務。簡單地按照順序執行所有這些操作(以相反的順序)將產生您正在尋找的解決方案。

</teaching-to-fish>

+0

而不是問我什麼,我知道,我想,如果你在你的「系統性」的方式解釋我們。 –

+0

也許會更好。但是僅僅給你一段代碼就可以讓你複製粘貼,繼續前進,然後回到下一次你被卡住的時候。相反,引導您完成自行實現解決方案所需的步驟會更耗時,但意味着您將來可以自己解決類似的問題 - 這使您成爲更好的開發人員*。 –

+0

我不知道該說些什麼。因爲我找不到解決方案,所以我發佈了這個問題。非常感謝你.. –

0
String longHex = "...."; 
byte[] array = new byte[longHex.length()/2]; 
for (int i=0; i<array.length; i++){ 
    Byte byte = Byte.parseByte(longHex.substring(i*2, i*2+2), 16); 
    array[i] = byte; 
}