我使用以下代码将字节转换为字符串:
System.out.println("string " + Byte.toString((byte)0x63));
为什么它输出 "string 99"。 如何修改才能让它输出 "string c"?
我使用以下代码将字节转换为字符串:
System.out.println("string " + Byte.toString((byte)0x63));
为什么它输出 "string 99"。 如何修改才能让它输出 "string c"?
System.out.println(new String(new byte[]{ (byte)0x63 }, "US-ASCII"));
需要特别注意的是,将字节转换为字符串始终涉及到编码。如果不指定编码,将使用平台默认编码,这意味着在不同环境中运行时代码可能会出错。
UnsupportedEncodingException
异常,您可能希望传递 StandardCharsets.US_ASCII
而不是使用字符集名称。 - gustafc字符串构造函数适用于此转换:
System.out.println("string " + new String(new byte[] {0x63}));
使用char而不是byte:
System.out.println("string " + (char)0x63);
或者如果你想成为一个Unicode纯粹主义者,你可以使用代码点:
System.out.println("string " + new String(new int[]{ 0x63 }, 0, 1));
如果您喜欢老派的 US-ASCII "每个字节都是一个字符" 的理念:
System.out.println("string " + new String(new byte[]{ (byte)0x63 },
StandardCharsets.US_ASCII));
避免使用其他答案中推荐的String(byte[])
构造函数,它依赖于默认字符集。情况可能会出现,其中0x63
实际上不是字符c。printf
:System.out.printf("string %c\n", 0x63);
您也可以使用String#format
创建具有此格式的字符串:
String s = String.format("string %c", 0x63);
您可以使用
字符等价于0x63的是'c',但其字节等价于99
System.out.println("byte "+(char)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();
}
byte
转换为 char
,就应该能正常工作,即给出与给定字节的码点值对应的 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);
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;
}
StringBuilder str = new StringBuilder();
for (byte aByte : bytesArray) {
if (aByte != 0) {
str.append((char) aByte);
} else {
break;
}