将String更改为byte [] - 无需实际转换

时间:2012-09-28 12:05:14

标签: java string bytearray byte type-conversion

我有字符串:

String str = "KITTEN";

我想从它做一个byte [],但只是:

byte[] mybyte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'}

任何人都知道如何将String更改为该字节[]?我能找到的所有东西都是关于实际的转换 - 请注意我不希望有字符串的十六进制表示。

PS。问题的标题可能是错的 - 我很抱歉,不知道如何写它。

编辑:

byte[] myBytes = str.getBytes();

显示:

byte[] display = new byte[] { 0x00, 0, 0, 'K', 'I', 'T'}; 

工作,并显示:

byte[] display = new byte[] {  0x00, 0, 0, myBytes[0], myBytes[1], myBytes[2] }; 

不起作用。 我尝试通过NFC将其显示在连接到Android手机的设备屏幕上。你知道是什么原因造成的吗?

4 个答案:

答案 0 :(得分:6)

正在转换,并且必须转换 - charbyte不同。

您可以使用“ISO-8859-1”作为传递给String.getBytes()的编码,每个字符可以获得一个字节,仅对U + 0000到U + 00FF有效(可能包括字符中的字符) “洞”;字符不是真正的ISO-8859-1,但是嘿...)你会得到'?'的ASCII表示但是对于不在该范围内的任何角色。

想要这样做可能表明你早些时候出错了。特别是,如果你试图找回一些你最初转换成字符串的任意二进制数据而不使用base64或类似的东西,你可能已经丢失了数据。

答案 1 :(得分:1)

getBytes()适合我:

String str = "KITTEN";
byte[] bytes = str.getBytes();
for(byte b : bytes) {
    System.out.print("'" + (char) b + "' ");
}

'K' 'I' 'T' 'T' 'E' 'N' 

@Jon所写的其他内容仍然有效,因为getBytes()也正在进行转换:

  

使用平台将此String编码为字节序列   默认字符集,将结果存储到新的字节数组中。

由于使用getBytes()引入了一些平台依赖性,因此最好显式传递适当的Charset:

byte[] bytes = str.getBytes(StandardCharsets.ISO_8859_1);

答案 2 :(得分:1)

byte是一个关键字,因此您无法将其用作变量名称:

byte[] byte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'};

您可以使用:

byte[] myBytes = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'};

无论如何要从String str进行直接转换:

byte[] myBytes = str.getBytes();

答案 3 :(得分:0)

投影:由于信息丢失,char到byte无效。 char是具有编码信息的Unicode字符。字节是一个数字。没有编码,字节的数量没有意义。