我需要以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
请帮助我。提前致谢
答案 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个字符。