Возможно, следующий будет работать для вас:
byte byte1[] = {72, 101, 108, 108, 111, 33, 92, 45, 127, -5, -23};
StringBuilder buffer = new StringBuilder();
for(int i = 0; i < byte1.length;i++){
if (byte1[i] >= 32 && byte1[i] != 92 && byte1[i] != 127) buffer.append((char)byte1[i]);
else {
String temp;
if (byte1[i] == 92) {
buffer.append("\\\\");
}
else {
temp = String.format("\\0x%02x", byte1[i]);
buffer.append(temp);
}
}
}
System.out.println(buffer);
Это произведет вывод:
Hello!\\-\0x7f\0xfb\0xe9
«Представляемые» символы будут напечатаны в обычном порядке, остальные - в «шестнадцатеричном» экранированном коде. \
получает специальную обработку - если вы хотите, чтобы показать шестнадцатеричные коды с спасательными обратным косыми чертами, то вам нужен обратный слэш, чтобы избежать обратного косой черты (и получить \\
на выходе, вам нужно в коде "\\\\"
...
I также захватил значение символа 127
отдельно, так как я не хотел, чтобы в строке не было DEL
. Не знаете, какой эффект будет иметь в зависимости от окружающей среды.
Если ваше требование действительно точно так, как вы описали, вы можете рассмотреть следующее код (который производит именно то, что вы просили):
byte byte1[] = {1, 32, -1, -1};
StringBuilder buffer = new StringBuilder();
buffer.append("[");
for(int i = 0; i < byte1.length - 1;i++){
buffer.append(String.format("%d,", byte1[i]));
}
buffer.append(String.format("%d]", byte1[byte1.length - 1]));
System.out.println(buffer);
Выход:
[1,32,-1,-1]
Примечание - так как некоторые номера требуют более одного символа, вы в конечном итоге со строкой, которая содержит более 4-х символов. Об этом нет.
Как бы вы хотели, чтобы число, подобное '-1', представлялось как символ? Вы буквально хотите только знак '-'? – Floris
Точно я понятия не имею, но, к сожалению, это мое требование .... Любой альтернативный метод тоже классный .... –
Смотрите: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 'char' может представлять только один символ, поэтому' 32' невозможно одним символом. так что -1. 32 и -1 нужны два 'char'. – JeroenJK