將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();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章