1
我有一個字節數組到達,它包含從-128到127的正常值,還有一些字符如'O','K',空格。如何從字符中分離字節?
我怎樣才能將它們分開並以正確的格式打印?爲價值,我打印的價值,字符我打印'O','K'像一個字符串?
我有一個字節數組到達,它包含從-128到127的正常值,還有一些字符如'O','K',空格。如何從字符中分離字節?
我怎樣才能將它們分開並以正確的格式打印?爲價值,我打印的價值,字符我打印'O','K'像一個字符串?
不幸的是,根據您的字符編碼,任何字節或任何字節組合都可能是一個字符。您可能試圖分開人可讀的字符。
在這種情況下,一個良好的編碼將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)) ...
我認爲這應該做你打算做的事情,但是爲什麼你會這樣做,這是非常可疑的。
那麼如果你想要接收一個恰好是ASCII字符的值呢? (例如,79的值也是'O'的UTF-16代碼單元。)基本上你不應該混合二進制數據和文本數據,而沒有某種方式來告訴哪個是哪個... – 2014-08-28 16:44:55
@JonSkeet你是對的,我也發現了這個問題。但太糟糕了,這就是我需要解決的問題。 – bugger 2014-08-28 16:49:37
你不能「解決」缺乏信息。假設我向你發送了兩條消息,都是'new byte [] {79}'。第一個意思是「價值79」,第二個意思是「人物'O'」。其中的信息是一樣的 - 如果沒有框架信息,你顯然無法區分這兩種情況。 – 2014-08-28 16:51:51