在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);