将c++的宽字节字符串转换成java的字符串

注:本例只是用于记录,windows下用的是vs2010,测出来c++宽字符的编码是UTF-16LE。java中char类型的编码是UTF-16BE。

 /**
     * 将c++的宽字符字符串转换成java字符串
     * windows下面, c++的宽字符是UTF-16LE编码,utf16加小端字节序,utf16和utf8一样属于unicode编号的一种实现,
     * 不过没有utf8那么智能,utf8能自适应,不会有大端小端之类的。
     * 比如 "单桩抗压a" 对应的UTF-16LE编码(16进制)为 5553 6968 9762 8B53 6100 0000
     * @param arr c++传过来的宽字节字符串组成的字节数组
     */
    public static String getStrFromCppWCharByteArr(byte[] arr){
        //arr = ConversionSystemHelper.hexStringToBytes("5553696897628B530000");
        if(arr == null){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        int loopLen = arr.length;
        for(int i = 0; i < loopLen; ){
            byte b1 = arr[i];
            byte b2 = arr[i + 1];
            if(b1 == 0 && b2 == 0){ //结尾了
                break;
            }
            int c1 = (b2 << 8) & 0x0000ffff;
            int c2 = b1 & 0x000000ff;
            int c3 = c1 | c2;
            char c4 = (char) c3;
            sb.append(c4);
            i = i + 2;
        }
        System.out.println(sb.toString());
        return sb.toString();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章