50,528
社区成员
发帖
与我相关
我的任务
分享
public class ByteArrayToUnicodeHighLow
{
public static void main(String[] args) throws Exception
{
//高位在前,低位在后,可直接转
//
byte[] origin = {108,95};//108-->6c; 95-->5f
String unicodeString = new String(origin,"unicode");
System.out.println(unicodeString);
}
}
/*
* 江
*/
或者在数组的头加两个字节:fe,ff也可以。
看下面的代码:
public class ByteArrayToUnicodeHighLow1
{
public static void main(String[] args) throws Exception
{
//高位在前,低位在后,数组前加两个字节ff,fe也可以。
//
byte[] origin = {-2,-1,108,95};//-2-->fe; -1-->ff; 108-->6c; 95-->5f
String unicodeString = new String(origin,"unicode");
System.out.println(unicodeString);
}
}
/*
* 江
*/
如果在数组里的存储顺序为5f,6c,也就是低位在前,高位在后,那么在转换时必需在数组的前两个字节放置ff,fe. 否则,出错。看下面的代码:
public class ByteArrayToUnicodeLowHigh
{
public static void main(String[] args) throws Exception
{
//低位在前,高位在后,不可直接转,直接转出现错误.
//
byte[] origin = {95,108};// 95-->5f; 108-->6c;
String unicodeString = new String(origin,"unicode");
System.out.println(unicodeString);
}
}
/*
* 彬 //错误输出
*/
必需在数组前加上ff,fe(-1,-2),才能得到正确结果:
public class ByteArrayToUnicodeLowHigh1
{
public static void main(String[] args) throws Exception
{
//低位在前,高位在后,不可直接转,直接转出现错误,数组前加上ff,fe即可。
//
byte[] origin = {-1,-2,95,108};// -1-->ff; -2-->fe; 95-->5f; 108-->6c
String unicodeString = new String(origin,"unicode");
System.out.println(unicodeString);
}
}
/*
* 江
*/
楼主给出的顺序是低位在前,高位在后,所以可以在数组前加上ff,fe转换,或者把顺序改过来直接转换。也就是楼主说的,不需要加前面的fe ff也正常。
public class ByteArrayToUnicode
{
public static void main(String[] args) throws Exception
{
byte[] origin=new byte[500*1024];//模拟数据。
origin[101]=95;
origin[102]=108;
origin[103]=-49;
origin[104]=-126;
origin[105]=0;
origin[106]=0;
byte[] b=new byte[6];
System.arraycopy(origin,101,b,0,b.length);
String unicodeString=null;
unicodeString=byteToUnicode(b);
System.out.println(unicodeString);
}
//把字节数组转换成字符串。
//
public static String byteToUnicode(byte[] b) throws Exception
{
byte[] bytes=new byte[b.length]; //是存放unicode 编码头(ff,fe)
bytes[0]=-2; //-2 对应fe,-1对应ff. 后面要交换,所以保存 fe,ff.
bytes[1]=-1;
for(int i=0; i<(b.length-2);i+=2) //两个字节交替放入数组.放完后是{208,95,-126,-49} 后面的0不处理。
{
bytes[i+2]=b[i+1];
bytes[i+3]=b[i];
}
String result=new String(bytes,"Unicode");
return result;
}
}