我使用下面的代码将字节转换为字符串:
System.out.println("string " + Byte.toString((byte)0x63));
为什么要打印"字符串99"。 如何修改让它打印"字符串c"?
答案 0 :(得分:35)
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII"));
特别注意,将字节转换为字符串总是涉及编码。如果您没有指定它,您将使用平台默认编码,这意味着代码在不同环境中运行时可能会中断。
答案 1 :(得分:18)
字符串ctor适合此转换:
System.out.println("string " + new String(new byte[] {0x63}));
答案 2 :(得分:11)
使用char而不是byte:
System.out.println("string " + (char)0x63);
或者,如果您想成为Unicode清教徒,则使用代码点:
System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1));
如果你喜欢旧的skool US-ASCII“每个字节都是一个字符”的想法:
System.out.println("string " + new String(new byte[]{ (byte)0x63 },
StandardCharsets.US_ASCII));
避免使用其他答案中推荐的String(byte[])
构造函数;它依赖于默认的字符集。在0x63
实际上不是字符 c 的情况下,可能会出现这种情况。
答案 3 :(得分:3)
您可以使用printf
:
System.out.printf("string %c\n", 0x63);
您也可以使用String#format
:
String s = String.format("string %c", 0x63);
答案 4 :(得分:3)
你可以使用
等于0x63的字符是'c'但是相当于它的字节是99
System.out.println("byte "+(char)0x63);
答案 5 :(得分:2)
您必须从字节数组中构造一个新字符串。 byteArray
中的第一个元素应为0x63
。如果您想要添加更多字母,请将byteArray
更长并将其添加到下一个索引。
byte[] byteArray = new byte[1];
byteArray[0] = 0x63;
try {
System.out.println("string " + new String(byteArray, "US-ASCII"));
} catch (UnsupportedEncodingException e) {
// TODO: Handle exception.
e.printStackTrace();
}
请注意,指定编码最终会抛出UnsupportedEncodingException
,您必须相应地处理。
答案 6 :(得分:1)
如果它是单个字节,只需将byte
强制转换为char
,它应该可以正常工作,即给出与给定字节的代码点值对应的char
实体。如果没有,请使用其他地方提到的String
构造函数。
char ch = (char)0x63;
System.out.println(ch);
答案 7 :(得分:1)
String str = "0x63";
int temp = Integer.parseInt(str.substring(2, 4), 16);
char c = (char)temp;
System.out.print(c);
答案 8 :(得分:0)
这是我的版本:
public String convertBytestoString(InputStream inputStream)
{
int bytes;
byte[] buffer = new byte[1024];
bytes = inputStream.read(buffer);
String stringData = new String(buffer,0,bytes);
return stringData;
}