
Java中byte数组转换成string字符串可以直接使用string类的构造函数。而string转byte数组,则可以使用string类型的getBytes()方法进行转换,如下形式:
1、string 转 byte[]
String str = "Hello";//声明一个字符串
byte[] srtbyte = strgetBytes();//使用string类的getBytes方法进行转换
2、byte[] 转 string
byte[] srtbyte;//声明一个byte字节数组
String res = new String(srtbyte);//使用构造函数转换成字符串
Systemoutprintln(res);
也可以将byte转换的时候,设定编码方式相互转换,如下代码:
String str = "hello";
byte[] srtbyte = null;
try {
srtbyte = strgetBytes("UTF-8");//设定转换的编码格式
String res = new String(srtbyte,"UTF-8");
Systemoutprintln(res);
} catch (UnsupportedEncodingException e) {//有可能会出现不能支持的编码格式,捕捉异常。
eprintStackTrace();
}
1string 转 byte[]
byte[] midbytes=isoStringgetBytes("UTF8");
//为UTF8编码
byte[] isoret = srt2getBytes("ISO-8859-1");
//为ISO-8859-1编码
其中ISO-8859-1为单字节的编码
2byte[]转string
String isoString = new String(bytes,"ISO-8859-1");
String srt2=new String(midbytes,"UTF-8");
说明:
在网络传输或其它应用中常常有同一的中间件,假设为String类型。因此需要把其它类型的数据转换为中间件的类型。
将字符串进行网络传输时,如socket,需要将其在转换为byte[]类型。这中间如果采用用不同的编码可能会出现未成预料的问题,如乱码。
下面举个例子:
我们用socket传输String类型的数据时,常常用UTF-8进行编码,这样比较可以避免一个“中文乱码”的问题。
发送端:
String sendString="发送数据";
byte[] sendBytes= sendString getBytes("UTF8");
socket发送
接受端:
String recString=new String( sendBytes ,"UTF-8");
但是,这里往往又会出现这样一个问题。就是想要发送的数据本身就是byte[]类型的。
如果将其通过UTF-8编码转换为中间件String类型就会出现问题
如:
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
String sendString=new String( bytes ,"UTF-8");
byte[] sendBytes= sendString getBytes("UTF8");
然后再发送
接受时进行逆向转换
String recString=new String( sendBytes ,"UTF-8");
byte[] Mybytes=isoStringgetBytes("UTF8");
这时Mybytes中的数据将是[50, 0, -17, -65, -67, 28, -17, -65, -67]
因此,需要采用单字节的编码方式进行转换
String sendString=new String( bytes ,"UTF-8"); 改为 String sendString=new String( bytes , "ISO-8859-1" );
byte[] Mybytes=isoStringgetBytes("UTF8"); 改为 byte[] Mybytes=isoStringgetBytes( "ISO-8859-1" );
这样所需要的字节就有恢复了。
String a = "5317";
byte[] b = new byte[alength()];
for( int i=0 ; i<alength() ; i++ ){
b[i] = (byte)((byte)acharAt(i)-48);
}
//这段代码希望对你有帮助
不过字符串中只能是数字哦
程序如下:
String s = "fs123fdsa";//“fs123fdsa”是输入的string变量
byte b[] = sgetBytes();//String转换为byte[]
String t = new String(b);//bytep[]转换为String
public String byte2hex(byte[] bytes){
StringBuilder sb = new StringBuilder();
String tmp = null;
for(byte b: bytes){
//将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制
tmp = IntegertoHexString(0xFF & b);
if(tmplength() == 1){
tmp = "0" + tmp;
}
sbappend(tmp);
}
return sbtoString();
}
将分别返回"中"这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,结果如下:
这个new String(byte[], decode)实际是使用指定的编码decode来将byte[]解析成字符串
结果: 通过输出s_gbk、s_utf8和s_iso88591,会发现s_gbk和s_utf8都是"中",而只有s_iso88591是一个不被识别的字符(可以理解为乱码),为什么使用ISO8859-1编码再组合之后,无法还原"中"字?原因很简单,因为ISO8859-1编码的编码表根本就不包含汉字字符,当然也就无法通过"中"getBytes("ISO8859-1");来得到正确的"中"字在ISO8859-1中的编码值了,所以,再通过new String()来还原就更是无从谈起。
因此,通过StringgetBytes(String decode)方法来得到byte[]时,一定要确定decode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原。
注意:
有时候,为了让中文字符适应某些特殊要求(如>
以上就是关于java里面byte数组和String字符串怎么转换全部的内容,包括:java里面byte数组和String字符串怎么转换、java 里面的string 和byte[] 怎么互转、java 里String 转成byte【】数组,String a = "5317",转换成的byte【】={5,3,1,7}。谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)