移植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);
------解决方案--------------------
是我理解的肤浅。
"江"字的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);