2016-02-25 27 views
0

我必須在Java中讀取一個無符號的8位字節數組(值範圍是0-255),並需要將其解碼爲字符串。解密無符號字節數組(這是短[])在Java中的字符串

但是在java中,由於字節是8位有符號值,因此java會將其視爲short [](short值的數組)而不是byte []。我只能將對象投射到短[]。

我需要的是一種將此數組解碼爲字符串的方法。

在此先感謝!

+2

請給出一個輸入的例子和d期望的輸出。 –

+0

如果您不知道編碼(或[Charset](http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html),如您所知),您無法安全解碼字節序列。假設一個字節等於一個字符是不正確的,並且會破壞一個字節範圍以外的數千個字符。 – VGR

+0

不幸的是,我沒有關於編碼的信息。數據來自Tibco RV,其類型爲U8ARRAY。 (TibrvMsg.U8ARRAY) – Sanjeev

回答

2

那麼,你有沒有試過顯而易見的?

public static void main(String[] args) { 
    final short[] input = {72, 69, 76, 76, 79}; 

    for (final short character : input) { 
     System.out.println((char) character); 
    } 
} 
+0

有些人物是玩偶?和一些不可讀的符號。只有75%的文字是可讀的。有沒有辦法解決這個問題? 準確地說,數據來自Tibco Rv和數據類型U8ARRAY。 – Sanjeev

+0

一個字節≠一個字符。這樣盲目地認爲字節是像US-ASCII,ISO-8859-1或Windows-1252這樣的單字節編碼。 – VGR

+0

@Sanjeev你寫道「我需要的是一種將此數組解碼爲字符串的方法。」並且這樣做 - 如果您不知道字節是否代表有效字符,則必須查找或檢查寫入所用系統的人員,因爲在查看字符時看不到此字符只要。 – Smutje

0
short[] x = {0x45,0x46,0x47}; 
    byte[] y = {0x45,0x46,0x47}; 
    System.out.println(new String(y)); 
    StringBuffer str = new StringBuffer(); 
    for(short s : x) 
     str.append((char)s); 
    System.out.println(str.toString()); 

輸出

EFG 
EFG 
+0

你認爲'new String(y)'會在Windows上,默認的Charset是UTF-16LE嗎? – VGR

0

你可以一個無符號字節轉換爲字符是這樣的:

byte unsignedByte = 65; 
    char character = (char) unsignedByte; 

所有你現在要做的就是在所有創建一個循環你的價值