leetcode 已知编码后的结果,如何通过解码得到编码前的内容

问题描述: 传入一个 srvContent ,通过 smsPDUEncoded 方法进行编码, 得到一个list conlist. 那么如果知道 conlist 如何进行解码 得到 srvContent ,尝试了很多方法都达不到预期的效果
例如: 传入: srvContent = "为中华之崛起而读书,Study for the rise of China"
得到: conlist.get(0) = "true-4a4e3a4e2d534e4e4b5d1b8d77800c8bfb4e66002c0053007400750064007900200066006f00720020007400680065002000720069007300650020006f00660020004300680069006e0061"

public List<String> smsPDUEncoded(String srvContent) {
        int length = srvContent.length();
        int k = 0;// 短信截取位
        boolean bo = false;//用于判读短信中是否含有中文
        List<String> conlist = new ArrayList<String>();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            String s1 = srvContent.substring(i, i + 1);
            // 是字符,前面两位是00 中文需要四位16进制来表示
            if (s1.getBytes().length == 1) {
                sb.append("00");
            } else {
                bo = true;
            }
            sb.append(Integer.toHexString(srvContent.charAt(i)));
            if (sb.length() == 280 && bo) {//中文短信字符长度到280分条发送
                String s = sb.toString();
                sb = new StringBuffer();
                sb.append("true-");
                // 最后接上内容编码长度的1/216进制的2位来表示
                if (Integer.toHexString(
                        srvContent.substring(k, i + 1).length() * 2).length() < 2) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
                        .length() * 2));
                sb.append(s);

                conlist.add(sb.toString());//增加到短信LIST中
                sb = new StringBuffer();
                bo = false;//
                k = i + 1;
            } else if ((i - k) == 159) {//英文短信
                String s = sb.toString();
                sb = new StringBuffer();
                //conlist.add("false-"/* + srvContent.substring(k, i + 1)*/);
                sb.append("false-");
                if (Integer.toHexString(
                        srvContent.substring(k, i + 1).length() * 2).length() < 2) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
                        .length() * 2));
                sb.append(s);

                conlist.add(sb.toString());//增加到短信LIST中
                
                
                sb = new StringBuffer();
                bo = false;
                k = i + 1;
            } else if (i == length - 1 && !bo) {//英文短信最后一条
                //conlist.add("false-" /*+ srvContent.substring(k, i + 1)*/);
                String s = sb.toString();
                sb = new StringBuffer();
                sb.append("false-");
                // 最后接上内容编码长度的1/216进制的2位来表示
                if (Integer.toHexString(
                        srvContent.substring(k, i + 1).length() * 2).length() < 2) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
                        .length() * 2));
                sb.append(s);
                conlist.add(sb.toString());
            } else if (i == length - 1 && bo) {//中文短信最后一条
                String s = sb.toString();
                sb = new StringBuffer();
                sb.append("true-");
                // 最后接上内容编码长度的1/216进制的2位来表示
                if (Integer.toHexString(
                        srvContent.substring(k, i + 1).length() * 2).length() < 2) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(srvContent.substring(k, i + 1)
                        .length() * 2));
                sb.append(s);
                conlist.add(sb.toString());
            }
        }
        return conlist;
    }


package work;

import java.io.UnsupportedEncodingException;

public class MSMDecode {
    public static void main(String[] args) {
        //0011000D91689158148900F70008008c0032003000320031002d00310032002d00300033002000310031003a00310035003a00340037002d5c714e1c002d4e2d5fc3673a623f002d005500500053005f0045006100730079005f00330053002d8f9351fa7535538b0041503c4e3a003200330031002e0034002c59274e8e62a58b669600503c4e0a9650003100300030002e0030003b8f9351657535
        String str = "0011000D91685162059952F20008008c65c18def7535538b0042503c4e3a003200330038002e0031002c59274e8e62a58b669600503c4e0a9650003100300030002e0030003b65c18def7535538b0041503c4e3a003200330038002e0031002c59274e8e62a58b669600503c4e0a9650003100300030002e0030003b8f9351fa7535538b0043503c4e3a003200330031002e0031002c59274e8e62a5";
        System.out.println("接收电话号码为: "+phoneNumber(str.substring(12,24))+" 短信内容为: "+DecodeUCS2(str.substring(32)));
    }
    //手机号解码
    public static String phoneNumber(String phoneYuan) {
        String phoneNumber= "";
        for(int i = 0; i < 12;i+=2) {
            phoneNumber += phoneYuan.substring(i+1,i+2);
            phoneNumber += phoneYuan.substring(i,i+1);
        }
        return phoneNumber.replace("F", "");
    }
    //发送短信内容解码
    public static String DecodeUCS2(String src) {
        byte[] bytes = new byte[src.length() / 2];
 
        for (int i = 0; i < src.length(); i += 2) {
            try {
                bytes[i / 2] = (byte) (Integer
                        .parseInt(src.substring(i, i + 2), 16));
            } catch (Exception e) {
                System.out.println("异常字符:"+src.substring(i, i + 2));
            }
        }
        String reValue="";
        try {
            reValue = new String(bytes, "UTF-16BE");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return reValue;
    }
}