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

时间:2011-12-28 09:36:20

标签: java

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

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

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

9 个答案:

答案 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;

}