String and Byte

来源:互联网 发布:阿里云快照功能 编辑:程序博客网 时间:2024/04/29 04:10


http://zhangyuefeng1983.blog.163.com/blog/static/1083372520126693524870/


1.string 转 byte[]

byte[] midbytes=isoString.getBytes("UTF8");
//为UTF8编码
byte[] isoret = srt2.getBytes("ISO-8859-1");
//为ISO-8859-1编码
其中ISO-8859-1为单字节的编码
2.byte[]转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=isoString.getBytes("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=isoString.getBytes("UTF8");  改为   byte[] Mybytes=isoString.getBytes( "ISO-8859-1" );
这样所需要的字节就有恢复了。
http://blog.csdn.net/shuaihj/article/details/7478773

1、字节数组转换为字符串

byte[] byBuffer = new byte[20];
... ...
String strRead = new String(byBuffer);
strRead = String.copyValueOf(strRead.toCharArray(), 0, byBuffer.length]);

2、字符串转换成字节数组

byte[] byBuffer = new byte[200];
String strInput="abcdefg";
byBuffer= strInput.getBytes();

注意:如果字符串里面含有中文,要特别注意,在android系统下,默认是UTF8编码,一个中文字符相当于3个字节,只有gb2312下一个中文相当于2字节。这种情况下可采取以下办法:

byte[] byBuffer = new byte[200];
String strInput="我是字符串";
byBuffer= strInput.getBytes("gb2312");



int beginIndex = 0;
     byte[] ch = line.getBytes(def.getEncode());
     for(int a =0; a < clmSizeList.size(); a++){
      int length = clmSizeList.get(a);
      clmDataAry[a] = new String(ch, beginIndex, length);
      beginIndex = beginIndex + length;
     }

0 0
原创粉丝点击