日期:2014-05-20  浏览次数:20810 次

JAVA C++风格的byte字符串转换为String字符串问题
移植C++代码到JAVA中,遇到下面这样的问题,请大家帮忙看看:
byte b[] = new byte[500*1024];
读二进制的文件到数组b中,文件里面有部分unicode编码的中文字符,
现知道数组中第101个字符开始是中文,数值依次如下95,108,-49,-126,0,0(“江苏”的unicode编码,JAVA中没无符号byte,所以有负数,0,0表示结束),请帮忙实现把这6个元素转换为String,便于显示。

C++中很方面 char* pStr = &b[100];这样就可以了,JAVA中怎么操作呢,能直接把这几个字符写到String对应的内存中吗?

------解决方案--------------------
String有个构造方法
String(byte bytes[], int offset, int length)

用在你这就是:
String str = new String(b, 100, b.length-100);
------解决方案--------------------
引用:
nmyangym给的方法可以解决问题
不要下面2行也可以,
        bytes[0]=-2;                //-2  对应fe,-1对应ff. 后面要交换,所以保存 fe,ff.
        bytes[1]=-1;

为什么要高低位互换呢?
            bytes[i+2]=b[i+1];
            ……

是我理解的肤浅。
    "江"字的unicode编码为:6c5f,分两个字节存储为:6c,5f(10进制表示为108,95)。
    如果在数组里存储的顺序也是这样的,也就是高位在前,低位在后,这样可以直接进行转换。
    看下面的代码:
 

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);