字节[]到字符[]

时间:2014-01-06 12:49:55

标签: java char byte

我需要以char形式显示原始字节数据,有一些问题我被卡住了例如[1,32,-1,-1](字节数据)当转换为char时出现[ 1,3,2, - ,1, - ,1]

我的要求

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

请帮助我。提前致谢

4 个答案:

答案 0 :(得分:2)

如果您只需要可打印的代表:

String readable = Arrays.toString(byte1);

但是如上所述,你需要一个类似于字符串的数组。

答案 1 :(得分:2)

为什么你需要坚持使用字符串,使用char数组的数组,如果它是短的则首先追加额外的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]);
    }
    }
}

答案 2 :(得分: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

“可表示”字符将正常打印,其他字符将变为“转义”十六进制代码。 \得到特殊处理 - 如果你想显示带有转义反斜杠的十六进制代码,那么你需要一个反斜杠来转义反斜杠(并在输出中得到\\,你需要{{1}在代码中......

我还分别捕获了字符值"\\\\",因为我不想在字符串中使用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);

注意 - 由于某些数字需要多个字符,因此最终会得到一个长度超过4个字符的字符串。没有办法解决这个问题。

答案 3 :(得分:-1)

由于char字段实际上是1个字符,因此无法在char字段中存储2个字符。