2014-01-06 8 views
2

Я нуждаюсь в отображении необработанных байтовых данных в форме char, есть некоторые проблемы, которые я застрял, например, как [1, 32, -1, -1] (байтовые данные), которые при пересчете в полукокса приходит как [1, 3, 2, -, 1, -, 1]Byte [] to char []

Мое требование

[1, 32, -1, -1] в формате полукокса.

Intailly

Я использовал команду

StringBuilder buffer = new StringBuilder(); 
    for(int i = 0; i < byte1.length;i++){ 
    buffer.append(byte1[i]); 
    } 
char[] c = buffer.toString().toCharArray(); 

не служил моим требованиям.

Тогда я использовал

char dig = (char)(((int)'0')+ (-32)); 

it gave an invalid output 

Просьба помочь в моем требовании. Заранее спасибо

+1

Как бы вы хотели, чтобы число, подобное '-1', представлялось как символ? Вы буквально хотите только знак '-'? – Floris

+0

Точно я понятия не имею, но, к сожалению, это мое требование .... Любой альтернативный метод тоже классный .... –

+0

Смотрите: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 'char' может представлять только один символ, поэтому' 32' невозможно одним символом. так что -1. 32 и -1 нужны два 'char'. – JeroenJK

ответ

2

Почему вы должны придерживаться строки, использовать массив массив символов, первый добавляет дополнительный 0 в случае, если его коротким и если ваши данные в формате байта, используйте bytes1.toString() и затем что-то вроде этого,

public class Example { 

    public static void main(String args[]) 
    { 
     String[] byte1 = {"2","45","56","1"}; 
     for (int i = 0; i < byte1.length; i++) { 
      if(byte1[i].length()<2){ 
       byte1[i] = "0"+byte1[i]; 
      } 
     } 
     char[][] chr = new char[5][10]; 
     StringBuilder buffer = new StringBuilder(); 
     for(int i = 0; i < byte1.length;i++){ 
       chr[i] = byte1[i].toCharArray(); 
     } 


    for (int i = 0; i < chr.length; i++) { 
      System.out.println(chr[i]); 
    } 
    } 
} 
-1

Поскольку поле char является litteraly 1 символом, нет способа сохранить 2 символа в поле char.

2

Если вам нужен только для печати представление:

String readable = Arrays.toString(byte1); 

Но, как указано вам нужен массив строк, как вещь для этого.

0

Возможно, следующий будет работать для вас:

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-х символов. Об этом нет.

+0

Во-вторых, это то, что 'Arrays.toString (byte [])' производит? – Jan