Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字节[]到字符[]_Java_Char_Byte - Fatal编程技术网

Java 字节[]到字符[]

Java 字节[]到字符[],java,char,byte,Java,Char,Byte,我需要以字符的形式显示原始字节数据,有一些问题我被卡住了,比如[1,32,-1,-1](字节数据),当转换成字符时,它会变成[1,3,2,-,1,-,1] 我的要求 [1,32,-1,-1]为字符格式 完好的 我使用了命令 StringBuilder buffer = new StringBuilder(); for(int i = 0; i < byte1.length;i++){ buffer.append(byte1[i]); } char[] c = buf

我需要以字符的形式显示原始字节数据,有一些问题我被卡住了,比如[1,32,-1,-1](字节数据),当转换成字符时,它会变成[1,3,2,-,1,-,1]

我的要求

[1,32,-1,-1]为字符格式

完好的

我使用了命令

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

请帮忙满足我的要求。提前感谢

由于字符字段只有一个字符,因此无法在字符字段中存储两个字符

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

String readable = Arrays.toString(byte1);

但是如上所述,您需要这样的字符串数组。

为什么您需要使用字符串,使用字符数组数组,首先在其短的情况下附加额外的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]);
    }
    }
}
公共类示例{
公共静态void main(字符串参数[])
{
字符串[]字节1={“2”、“45”、“56”、“1”};
for(int i=0;i如果(字节1[i].length(),则以下内容可能适用于您:

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);
“可表示”字符将正常打印,其他字符将转换为“转义”十六进制代码。
\
得到特殊处理-如果您想用转义反斜杠显示十六进制代码,那么您需要一个反斜杠来转义反斜杠(要在输出中获得
\\
,您需要在代码中加入
“\\\\\\”

我还分别捕获了字符值
127
,因为我不希望字符串中有
DEL
——不确定根据环境会有什么影响

如果你的需求确实和你描述的完全一样,你可以考虑下面的代码(它精确地产生你所要求的):


请注意-由于某些数字需要多个字符,因此最终的字符串长度超过4个字符。这是无法解决的。

您希望如何将
-1
这样的数字表示为一个字符?您真的希望只使用
-
符号吗?确切地说,我不知道,但遗憾的是,这是我的要求…任何替代方法也很酷…请参见:
char
只能表示一个字符,因此
32
不可能是一个字符。因此-1.32和-1需要两个
char
s。您的意思是byte[]而不是byte[]?我想您可以将有符号字节强制转换为无符号字节;但最终会得到“ASCII”127以上的代码看起来不太好看……此外,还会有控制代码(例如,数字
12
将清除屏幕)。我看不出这是一个合理的“要求”,除非您允许“转义”所有不在0x20-0x7F范围内的字符。第二个与
数组相同。toString(byte[])
生成的字符?
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
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]