2013-04-20 134 views
0

我遇到了將字節字符串轉換爲字節數組的轉換問題。如何將字節字符串轉換爲字節[]

即我有一個字符串「[B @ 1a758cb」。這是主要字符串「gunjan」的Base64加密字符串。這裏爲了解密,我想將加密的字節串轉換爲byte []。

但String.getByte []不適用於我。 String.getBytes []給出字節字符串的字節。

我該怎麼做?我是否必須迭代字節字符串中的每個字符並將它們轉換爲byte []?

我使用Apache 3.1編碼罐子裏的Base64轉換編輯。 這是從我得到這個密文代碼..

String in = "gunjan"; 
byte[] byteStr = in.getBytes(); 
byte[] base64Encoded = Base64.encodeBase64(byteStr); 

這裏base64Encoded的值是[B @ 1a758cb您還可以看到控制檯日誌圖像中.. enter image description here

+1

請看問題http://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string - 反之亦然?rq = 1涵蓋了這一點。 – Bobulous 2013-04-20 10:50:07

+2

Base64不包含'['或'@' – McDowell 2013-04-20 10:50:46

+5

您的字符串不是base64字符串,它是對字節數組調用'toString()'的結果。它絕不代表該數組的原始值。 – 2013-04-20 10:56:15

回答

4

首先,這裏沒有任何問題,因爲解碼後的字符串值(gunjan)等於原始值(gunjan)。

您對打印的中間字節數組內容感到困惑。如註釋中所述,字符串[@Bxxxx是在字節數組上調用toString()的結果。這不會顯示字節的值,而是數組的類型([@B),隨後是數組對象的hashCode。如果你想顯示的字節值,使用

System.out.println(Arrays.toString(byteArray)); 

你有一個潛在的錯誤,但:您正在使用的默認編碼轉換字符串字節,反之亦然。此編碼可能無法支持字符串中的每個字符。您應該使用支持地球上的每一個字符,像UTF8特定的編碼:

byte[] byteStr = string.getBytes("UTF8"); 
... 
String str = new String (byteStr, "UTF8"); 
+0

感謝您的答覆。在這裏我僅舉例說明,我如何加密文本。我的主要問題是我有加密的文本「[B @ 1a758cb」存儲在字符串變量中。我如何將它轉換爲字節[]。 String.getByte []在這裏不起作用。 – 2013-04-20 12:18:39

+0

也看到這篇文章:http://stackoverflow.com/questions/5499924/convert-java-string-to-byte-array/5500020#5500020這是非常類似於我的問題.. – 2013-04-20 12:19:28

+0

你不加密任何東西。您將一個字符串編碼爲64,然後對編碼後的字符串進行解碼,因爲您得到的是原始字符串。所以有什麼問題?你有沒有閱讀並理解我的答案? String.getBytes()將字符串轉換爲字節數組。什麼不起作用?向我們展示一段清晰的代碼,告訴我們你期望它做什麼,以及它做什麼。 – 2013-04-20 12:24:13