nokiacoding.java

来自「实现串口手机短信发送程序很全面的源代码」· Java 代码 · 共 157 行

JAVA
157
字号
package com.sunfruit.comm.test;

import java.io.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class NokiaCoding {

    private String phone = "";

    public NokiaCoding() {
        //System.out.println(getSendNumber("8613520593659"));
        ///System.out.println(getASCII("这是123"));
    }

    /**
     * 将字符串转换为16进制
     * @param str1 String
     * @return String
     */
    public String getASCII(String str1) {
        String retstr = "";

        for (int i = 0; i < str1.length(); i++) {
            String strtemp = str1.substring(i, i + 1);
            char[] chars = strtemp.toCharArray();
            for (int j = 0; j<chars.length; j++) {
                if(strtemp.getBytes().length==1)
                {
                    retstr +="00";
                }
                retstr += Integer.toHexString(chars[j]).toUpperCase();
//                retstr += (int) chars[j];

            }


//            try {
//                byte[] bytes=strtemp.getBytes("US-ASCII");
//                for (int j = 0; j <bytes.length; j++) {
//                    retstr += Integer.toHexString(bytes[j]).toUpperCase();
//                }
//
//            } catch (UnsupportedEncodingException ex) {
//                ex.printStackTrace();
//            }
        }
        return retstr;
    }

    public static String byteHEX(byte ib) {
        char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                       'A', 'B', 'C', 'D', 'E', 'F'};
        char[] ob = new char[2];
        ob[0] = Digit[(ib >>> 4) & 0X0F];
        ob[1] = Digit[ib & 0X0F];
        String s = new String(ob);
        return s;
    }


    /**
     * 将手机号进行转换
     * @param str1 String 手机号
     * @return String
     */
    public String getSendNumber(String str1) {
        return getSendNumber(str1, false);
    }

    /**
     * 将手机号进行转换
     * @param str1 String 手机号
     * @param addtag boolean 是否加86
     * @return String
     */
    public String getSendNumber(String str1, boolean addtag) {
        String retstr = "";
        if (addtag)
            str1 = "86" + str1;
        str1 += "F";
        for (int i = 0; i < str1.length(); ) {
            String strtemp = str1.substring(i, i + 2);
            retstr += strtemp.substring(1, 2) + strtemp.substring(0, 1);
            i += 2;
        }

        return retstr;
    }

    public static String encode7bit(String src) {
        String result = null;
        String hex = null;
        byte value;

        if (src != null && src.length() == src.getBytes().length) {
            result = "";
            byte left = 0;
            byte[] b = src.getBytes();
            for (int i = 0, j = 0; i < b.length; i++) {
                j = i & 7;
                if (j == 0)
                    left = b[i];
                else {
                    value = (byte) ((b[i] << (8 - j)) | left);
                    left = (byte) (b[i] >> j);
                    hex = Integer.toHexString((byte) value);
                    result += hex;
                    if (i == b.length - 1)
                        result += Integer.toHexString(left);
                }
            }

            result = result.toUpperCase();
        }
        return result;
    }


    /**
     * 获得发送的PDU字符串
     * @param from String 发送人手机所在的短信中心的号码
     * @param send String 收件人手机号
     * @param content String 内容
     * @return String
     */
    public String getPDUCoding(String from, String send, String content) {
        String leng = Integer.toHexString(content.length() / 2).toUpperCase();
        if (leng.length() == 1)
            leng = "0" + leng;
//        String sms="0891"+from+"11000D91"+send+"000804C2"+leng+content;
        String address = "0891" + from;
        phone = "11000D91" + send + "000800" + leng + content;
        //String sms="0011000D91"+send+"000800"+leng+content;

        return address + phone;
    }

    public int getPDULength() {
        return phone.length() / 2;
    }

    public static void main(String[] args) {
        new NokiaCoding();
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?