⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smstools.java

📁 手机短信编程的源代码
💻 JAVA
字号:
// Useful tools for coding and decoding SMS//// file:    SMSTools.java// used by: Msg.java//// For comments see header of SMS.java.//---------------------------------------------------------------------------------------package smspack;class SMSTools {  /**   * Convert a char array to a string   * @param test character array   * @return string   */  public static String convertCharArray2String(char[] chararray) {    int i, l;    String text = new String();    l = chararray.length;    for (i = 0; i < l; i++) {      text = text + chararray[i];    } // for    return text;  } // convertChar2String  /**   * Create the main part part of a PDU, for sending via AT commands to   * the mobile phone. The mobile phone complete this part of a PDU with   * some data of the mobile phone and sends it then to the base station.   * @param number dialing number   * @param numbertype national/international dialing number   * @param message message to send (SMS)   * @return PDU   */  public static byte[] getPDUPart(String number, boolean numbertype, String message) {    byte[] pdu;    byte[] no = convertDialNumber(number);    byte[] msg = compress(convertUnicode2GSM(message));    int l = no.length;    int m = msg.length;    pdu = new byte[4 + l + 4 + m];    pdu[0] = 0x11;                      // message flags    pdu[1] = 0x00;                      // message reference number with default value    pdu[2] = (byte)number.length();     // set length of dialing number    if (numbertype = SMS.TOA_NATIONAL)      pdu[3] = (byte)0x81;              // indicator for a national number    else      pdu[3] = (byte)0x91;              // indicator for a international number    System.arraycopy(no, 0, pdu, 4, l); // set dialing number    pdu[4 + l] = 0x00;                  // protocol identifier with GSM 03.40 default value    pdu[4 + l + 1] = 0x00;              // data coding scheme, use GSM 03.38 character set (= default value)    pdu[4 + l + 2] = (byte)0xAA;        // message validity period = 4 days    // message (= SMS content)    pdu[4 + l + 3] = (byte)message.length();      // set length of message    System.arraycopy(msg, 0, pdu, 4 + l + 4, m);  // set message    return pdu;  }  // getPDUPart  /**   * Convert a dialing number into the GSM format   * @param number dialing number   * @return coded dialing number   */  public static byte[] convertDialNumber(String number) {    int l = number.length();    int j = 0;  // index in addr    int n;      // length of converted dial number    byte[] data;    // calculate length of converted dialing number    n = l / 2;    if (l % 2 != 0) {      n++;    }    data = new byte[n];    for (int i = 0; i < n; i++) {      switch (number.charAt(j)) {        case '0': data[i] += 0x00; break;        case '1': data[i] += 0x01; break;        case '2': data[i] += 0x02; break;        case '3': data[i] += 0x03; break;        case '4': data[i] += 0x04; break;        case '5': data[i] += 0x05; break;        case '6': data[i] += 0x06; break;        case '7': data[i] += 0x07; break;        case '8': data[i] += 0x08; break;        case '9': data[i] += 0x09; break;      } // switch      if (j + 1 < l) {        switch (number.charAt(j + 1)) {          case '0': data[i] += 0x00; break;          case '1': data[i] += 0x10; break;          case '2': data[i] += 0x20; break;          case '3': data[i] += 0x30; break;          case '4': data[i] += 0x40; break;          case '5': data[i] += 0x50; break;          case '6': data[i] += 0x60; break;          case '7': data[i] += 0x70; break;          case '8': data[i] += 0x80; break;          case '9': data[i] += 0x90; break;        } // switch      } // if      else {        data[i] += 0xF0;      } // else      j += 2;    }  // for    return data;  } // convertDialNumber  /**   * Convert the address field (dialing number) from the GSM format   * @param number dialing number   * @return decoded dialing number   */  public static String decodeAddressField(String number) {    int len;      // length of originating adress    int n;        // length of converted dial number    String s, orgAdr="";    s = number.substring(0, 2);         // get raw length [digits] of originating adress    len = Integer.parseInt(s, 16);      // calculate length [digits] of originating adress    number = number.substring(2, number.length());    s = number.substring(0, 2);         // get raw length [digits] of originating adress    if (s.compareTo("91") == 0) {      orgAdr = "+";      number = number.substring(2, number.length());    } // if    //----- digit swap procedure for the number    n = 0;    if (len % 2 != 0) {      number = number.substring(0, number.length()-1);  // shorten number in case of wrong number format    } // if    do {      orgAdr += number.substring(n+1, n+2) + number.substring(n, n+1);      n += 2;    } while (n < number.length());    return orgAdr;  } // decodeAddressField  /**   * Convert a Unicode text string into the GSM standard alphabet   * @param msg text string in ASCII   * @return text string in GSM standard alphabet   */  public static byte[] convertUnicode2GSM(String msg) {    byte[] data = new byte[msg.length()];    for (int i = 0; i < msg.length(); i++) {      switch (msg.charAt(i)) {        case '@':  data[i] = 0x00; break;        case '$':  data[i] = 0x02; break;        case '\n': data[i] = 0x0A; break;        case '\r': data[i] = 0x0D; break;        case '_':  data[i] = 0x11; break;        case '

⌨️ 快捷键说明

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