Java 字节[]到字符[]
我需要以字符的形式显示原始字节数据,有一些问题我被卡住了,比如[1,32,-1,-1](字节数据),当转换成字符时,它会变成[1,3,2,-,1,-,1] 我的要求 [1,32,-1,-1]为字符格式 完好的 我使用了命令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
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]