我使用下面的代码将字节转换为字符串:
System.out.println("string " + Byte.toString((byte)0x63));
Run Code Online (Sandbox Code Playgroud)
为什么打印"字符串99".如何修改让它打印"字符串c"?
Mic*_*rdt 35
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII"));
Run Code Online (Sandbox Code Playgroud)
请特别注意,将字节转换为字符串始终涉及编码.如果您没有指定它,您将使用平台默认编码,这意味着代码在不同环境中运行时可能会中断.
Mat*_*ten 20
字符串ctor适合此转换:
System.out.println("string " + new String(new byte[] {0x63}));
Run Code Online (Sandbox Code Playgroud)
gus*_*afc 12
使用char而不是byte:
System.out.println("string " + (char)0x63);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想成为Unicode清教徒,则使用代码点:
System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1));
Run Code Online (Sandbox Code Playgroud)
如果你喜欢旧的skool US-ASCII"每个字节都是一个字符"的想法:
System.out.println("string " + new String(new byte[]{ (byte)0x63 },
StandardCharsets.US_ASCII));
Run Code Online (Sandbox Code Playgroud)
避免使用String(byte[])其他答案中推荐的构造函数; 它依赖于默认的字符集.0x63实际上不是角色c的情况可能会出现.
您可以使用printf:
System.out.printf("string %c\n", 0x63);
Run Code Online (Sandbox Code Playgroud)
您也可以使用String#format以下格式创建一个字符串:
String s = String.format("string %c", 0x63);
Run Code Online (Sandbox Code Playgroud)