如何将Java字符串转换为字节[]?

如何将Java字符串转换为字节[]?,java,arrays,string,Java,Arrays,String,有没有办法将Java字符串转换为字节[](而不是装箱的字节[]) 在尝试这一点时: System.out.println(response.split("\r\n\r\n")[1]); System.out.println("******"); System.out.println(response.split("\r\n\r\n")[1].getBytes().toString()); 我得到了不同的输出。无法显示第一个输出,因为它是gzip字符串 <A Gzip String>

有没有办法将Java
字符串
转换为
字节[]
(而不是装箱的
字节[]

在尝试这一点时:

System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());
我得到了不同的输出。无法显示第一个输出,因为它是gzip字符串

<A Gzip String>
******
[B@38ee9f13

方法
decompressGZIP()
需要的对象是
字节[]

因此,您所问问题的基本技术答案是:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only

然而,您似乎正在努力解决的问题是,这并没有很好地显示出来。调用
toString()
只会为您提供默认的
对象。toString()
即类名+内存地址。在您的结果中
[B@38ee9f13
[B
表示
字节[]
38ee9f13
是内存地址,由
@
分隔

出于显示目的,您可以使用:

Arrays.toString(bytes);
但这将只显示为逗号分隔的整数序列,这可能是您想要的,也可能不是您想要的

要从
字节[]
获取可读的
字符串
,请使用:

String string = new String(byte[] bytes, Charset charset);


之所以青睐
字符集
版本,是因为Java中的所有
字符串
对象在内部都存储为UTF-16根据所选的字符集,您将获得该
字符串的给定图示符的不同字节细分。

您可以使用
String.getBytes()
返回
字节[]
数组。

尝试使用String.getBytes()。它返回表示字符串数据的字节[]。 例如:

简单地说:

String abc="abcdefghight";

byte[] b = abc.getBytes();

您可能想尝试
返回新字符串(byteout.toByteArray(Charset.forName(“UTF-8”))
无需将java更改为字符串参数。您必须更改c代码以接收不带指针的字符串及其代码:

Bool DmgrGetVersion (String szVersion);

Char NewszVersion [200];
Strcpy (NewszVersion, szVersion.t_str ());
.t_str () applies to builder c ++ 2010

我知道我参加聚会有点晚了,但这很有效(我们的教授给我们的)

publicstaticbyte[]asBytes(strings){
串tmp;
字节[]b=新字节[s.length()/2];
int i;
对于(i=0;i
很抱歉,我试图将字符串转换为bytearray并返回,但得到了错误的结果。我将在一段时间后编辑它并返回。您的问题是
String.getBytes()
确实返回了字节数组,但您认为字节数组的
toString()
将返回有用的结果是不正确的。String.getBytes(“UTF-8”)需要处理不支持的编码异常,而string.getBytes(Charset.forName(“UTF-8”))不需要。至于哪种方法“更好”,我留给读者作为练习。
string.getBytes(StandardCharset.UTF_8)
也可以使用,它与
string.getBytes(Charset.forName(“UTF-8”))
我相信
标准字符集
在Java 7中是新出现的。我不明白为什么这个答案得到了这么多的支持。它可能是对的,但没有太大的帮助…只有几行代码,其中大部分是OP已经拥有的,并且没有解释
字符集.forName(“UTF-8”)的区别
make或why it's important.@LarsH你说得很好。老实说,我从没想到这个答案会如此流行。我现在扩展了答案,以“值得”向上投票。希望这是一个改进。感谢您展示了从字节到字符串的其他方式。注意:依赖于平台。更好的选择是使用此解码十六进制编码的字节数组。与此问题非常不同。如果
abc
包含大于2的非US-ASCII字符,如
”怎么办− 1“
或只是二进制数据(例如”�A.���b2”)?这不适用于
这个字符串只有5个字符。但是当我使用
getBytes()
时,我得到了7个字符。
String data = "sample data";
byte[] byteData = data.getBytes();
String abc="abcdefghight";

byte[] b = abc.getBytes();
Bool DmgrGetVersion (String szVersion);

Char NewszVersion [200];
Strcpy (NewszVersion, szVersion.t_str ());
.t_str () applies to builder c ++ 2010
public static byte[] asBytes (String s) {                   
           String tmp;
           byte[] b = new byte[s.length() / 2];
           int i;
           for (i = 0; i < s.length() / 2; i++) {
             tmp = s.substring(i * 2, i * 2 + 2);
             b[i] = (byte)(Integer.parseInt(tmp, 16) & 0xff);
           }
           return b;                                            //return bytes
    }