在Java中将字节转换为字符串

我使用下面的代码将字节转换为字符串:

System.out.println("string " + Byte.toString((byte)0x63)); 

为什么打印“字符串99”。 如何修改让它打印“字符串c”?

字符串ctor适合此转换:

 System.out.println("string " + new String(new byte[] {0x63})); 
 System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII")); 

请特别注意,将字节转换为字符串始终涉及编码。 如果您没有指定它,您将使用平台默认编码,这意味着代码在不同环境中运行时可能会中断。

使用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的情况

您可以使用

等于0x63字符是’c’,但是等效于它的字节是99

 System.out.println("byte "+(char)0x63); 

你可以使用printf

 System.out.printf("string %c\n", 0x63); 

您也可以使用String#format创建具有此类格式的String#format

 String s = String.format("string %c", 0x63); 

您必须从字节数组中构造一个新字符串。 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 ,您必须相应地处理它。

如果它是一个单字节,只需将byte转换为char ,它应该很好,即给出一个对应于给定字节的codepoint值的char实体。 如果没有,请使用其他地方提到的String构造函数。

 char ch = (char)0x63; System.out.println(ch); 
 String str = "0x63"; int temp = Integer.parseInt(str.substring(2, 4), 16); char c = (char)temp; System.out.print(c);