3

我有字符串:

String str = "KITTEN";

我想从中制作一个 byte[] ,但只是:

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

任何人都知道如何将字符串更改为该字节 []?我能找到的一切都是关于实际转换的——请注意,我不想用十六进制表示字符串。

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

4 回答 4

7

正在转换,并且必须转换 - achar与 a 不同byte

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

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

于 2012-09-28T12:13:06.157 回答
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()也在进行转换:

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

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

byte[] bytes = str.getBytes(StandardCharsets.ISO_8859_1);
于 2012-09-28T12:18:12.613 回答
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();
于 2012-09-28T12:18:43.403 回答
0

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

于 2012-09-28T12:54:58.123 回答