2012-09-28 105 views
2

我有字符串:更改字符串爲byte [] - 由於沒有實際的轉換

String str = "KITTEN"; 

而且我想通過它進行一個byte [],但只是:

byte[] mybyte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'} 

任何人知道如何將字符串更改爲該字節[]?我能找到的所有東西都是關於實際轉換 - 請注意,我不希望使用十六進制表示字符串。

PS。問題的標題可能是錯的 - 我很抱歉,不知道該怎麼寫。

編輯:

byte[] myBytes = str.getBytes(); 

顯示:

byte[] display = new byte[] { 0x00, 0, 0, 'K', 'I', 'T'}; 

作品,並顯示:

byte[] display = new byte[] { 0x00, 0, 0, myBytes[0], myBytes[1], myBytes[2] }; 

不起作用。 我嘗試在通過NFC連接到Android手機的設備的屏幕上顯示它。你知道是什麼造成了這個問題?

+2

怎麼樣'String.getBytes()' – Alex

+3

不知道「轉換」是什麼意思,但字符串中的字符是16位,字節是8位,所以一些轉換顯然是必需的。 –

+0

我只是想獲得我上面寫的字節[]。 getBytes不適用於我,因爲它會拋出異常。 – Doszi89

回答

1

的getBytes()爲我工作:

String str = "KITTEN"; 
byte[] bytes = str.getBytes(); 
for(byte b : bytes) { 
    System.out.print("'" + (char) b + "' "); 
} 

'K' 'I' 'T' 'T' 'E' 'N' 

的一切還有什麼@喬恩寫仍然是有效的,因爲getBytes()也做了轉換:

將此String編碼的字節序列使用平臺的默認字符集 ,將結果存儲到新的字節數組中。

由於使用的getBytes()介紹了一些平臺依賴性,你最好明確地傳遞一個合適的字符集:

byte[] bytes = str.getBytes(StandardCharsets.ISO_8859_1); 
+0

非常感謝。問題是你的例子使我成爲myBytes [] = {K,I,T,T,E,N},我需要完全myBytes [] = {'K','I', 'T','T','E','N'},有什麼想法? – Doszi89

+2

你是什麼意思?'K'只是ISO8859-1字符集中位置75的字符的可讀表示在你的字節數組中,你總是有8位的值 - 要打印它們,它們甚至需要被轉換成char(我在上面的System.out.println()中做的),否則你會得到輸出爲數字,如75 73 84 84 69 78. –

+0

我只想得到像這樣的字節數組:byte [] display = new byte [] {0x00,0x10,'K','I','T' };因爲在你的解決方案中,我沒有一個字符,我不能在屏幕上顯示它 – Doszi89

6

轉換,並必須轉換 - 一個char是不一樣的一個byte

您可以使用「ISO-8859-1」作爲編碼傳遞給String.getBytes(),這將使您得到每個字符一個字節,僅適用於U + 0000到U + 00FF(可能包括「孔「;這些字符實際上並不在ISO-8859-1中,但嘿...)你會得到'?'的ASCII表示形式。對於任何不在該範圍內的字符。

想要做到這一點可能意味着你早先出錯了。特別是,如果你試圖找回一些任意的二進制數據,你最初轉換成一個字符串而不使用base64或類似的東西,那麼你很可能已經丟失了數據。

+0

「hole」*是以拉丁文-1(它的確映射到U + 0000到U + 00FF的Unicode範圍),但它不在cp-1252中。 –

+0

@SébastienLeCallonnec:我想我的意思是「洞中的角色」 - 將被編輯。我的觀點是,在某些平臺上,懶惰的ISO-8859-1實現只是假設它是U + 0000-U + 00FF到字節0x00到0xff的映射。 –

+0

我的觀點是Unicode中存在相同的「漏洞」:http://www.unicode.org/charts/PDF/U0080.pdf。 –

1

byte是一個關鍵字,所以你不能把它作爲一個變量名:

byte[] byte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'}; 

你可以使用:

byte[] myBytes = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'}; 

反正做從Stringstr直轉換,你可以這樣做:

byte[] myBytes = str.getBytes(); 
+0

非常感謝。問題是你的例子使我成爲myBytes [] = {K,I,T,T,E,N},我需要的只是myBytes [] = {'K','I','T','T' 'E','N'},有什麼想法? – Doszi89

+0

一個字節只能容納一個字符。你想顯示報價?最後2個字節的數組例子是等價的。 – Reimeus

+0

我知道,問題是不同的。顯示byte [] display = new byte [] {0x00,0,0,'K','O','K','O','S'};工作,並顯示byte [] display = new byte [] {0x00,0,0,myBytes [0],myBytes [1],myBytes [2]};不起作用。我嘗試通過NFC將其顯示在手機的屏幕上。你知道是什麼造成了這個問題? – Doszi89

0

的投影:字符以字節是無效的,由於信息丟失。 char是一個具有編碼信息的Unicode字符。一個字節是一個數字。沒有編碼,字節的數量就沒有意義了。

相關問題