java里面byte数组和String字符串怎么转换

java里面byte数组和String字符串怎么转换,第1张

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}。谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9682589.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存