如何将Java字符串转换为字节[]?
有没有办法将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>
字符串
转换为字节[]
(而不是装箱的字节[]
)
在尝试这一点时:
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
}