也许以下内容适合您:
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
"representable"字符将被正常打印,其他字符将转换为“转义”十六进制代码。
\
获得特殊处理 - 如果您想显示具有反斜杠转义的十六进制代码,则需要反斜杠来转义反斜杠(并且要在输出中获得
\\
,则需要在代码中使用
"\\\\"
...
我还单独捕获了字符值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
这样的数字以什么形式表示为字符?你只需要字面上的-
符号吗? - Florischar
只能表示一个单个字符,所以32
不可能是一个字符。同样的道理,-1 也不是一个字符。32 和 -1 需要两个char
来表示。 - Jeroen