2014-08-28 66 views
1

我有一個字節數組到達,它包含從-128到127的正常值,還有一些字符如'O','K',空格。如何從字符中分離字節?

我怎樣才能將它們分開並以正確的格式打印?爲價值,我打印的價值,字符我打印'O','K'像一個字符串?

+1

那麼如果你想要接收一個恰好是ASCII字符的值呢? (例如,79的值也是'O'的UTF-16代碼單元。)基本上你不應該混合二進制數據和文本數據,而沒有某種方式來告訴哪個是哪個... – 2014-08-28 16:44:55

+0

@JonSkeet你是對的,我也發現了這個問題。但太糟糕了,這就是我需要解決的問題。 – bugger 2014-08-28 16:49:37

+5

你不能「解決」缺乏信息。假設我向你發送了兩條消息,都是'new byte [] {79}'。第一個意思是「價值79」,第二個意思是「人物'O'」。其中的信息是一樣的 - 如果沒有框架信息,你顯然無法區分這兩種情況。 – 2014-08-28 16:51:51

回答

2

不幸的是,根據您的字符編碼,任何字節或任何字節組合都可能是一個字符。您可能試圖分開人可讀的字符。

在這種情況下,一個良好的編碼將ISO_8859-1(標準1個字節編碼):

byte[] array = ...; //this is your byte array 
String string = new String(array, "ISO_8859-1"); //convert ALL the bytes to characters 

現在,你可以使用Character類來檢查你有什麼樣的字符:

for(int i = 0; i < array.length; i++) { 
    char ch = string.charAt(i); 
    //now perform your tests on the character 
    if(.../*character is good*/) System.out.println(ch); 
    else /*character shouldn't be displayed*/ System.out.prinln(((int)ch)); 
} 

例如,您可以打印所有代表有效字母字符:

if(Character.isLetter(ch)) ... 

我認爲這應該做你打算做的事情,但是爲什麼你會這樣做,這是非常可疑的。

相關問題