Wenn Sie an langen Textnachrichten interessiert sind, können Sie es versuchen
Schreiben Sie gemäß der Python -Methode um
/*** PDU SMS Analysis*** @param pduPayload* @return*/public static String retrieveSMSInfo(byte[] pduPayload) throws UnsupportedEncodingException {int startPos = 3;//#Originator addressint mRP_OA_len = pduPayload[startPos];byte[] mRP_OA = new byte[mRP_OA_len];System.arraycopy(pduPayload, startPos + 1, mRP_OA, 0, mRP_OA_len);startPos = startPos + 1 + mRP_OA_len;int mTPDU_len = pduPayload[startPos];//#BIT No. 7 6 5 4 3 2 1 0 //#uplink TP-RP Tp-udhi tp-sprsp Tp-VPF TP-RD TP-MTI //#Downlink TP-RP TP-udhi TP-SRI TP-MMS TP-MTI BYTE TP_HEADER = PDUPAYLAD [STARTPOS + 1]; byte tp_msg- & 1; // Ob der Inhalt des Textnachrichtes Protokollheaderinformationen enthält, enthält nicht, 1 enthält (lange Textnachricht, Drücken von Textnachricht) int tp_vpf = (tp_header >> 3) & 3; // Ob die Textnachricht gültige Zeitbytes enthält, 0 enthält nicht, andere enthalten // #00 bedeutet, dass es keinen gültigen Zeitraum gibt, TP-VP auf 00. // #10 repräsentiert das relative Format, und TP-VP übernimmt 1 Byte. // #01 bedeutet, dass TP-VP ein Format hinzufügt. TP-VP nimmt 7 Bytes auf. //#11 bedeutet absolutes Format, TP-VP nimmt 7 Bytes int tp_mms = (tp_header >> 2) & 1; //#TP-MMS (TP-More-Message-to-Send): 1 Nicht mehr Nachrichten, die in der SMS-Mitte startpos = startpos + 3; // ## ###te mtte smsnumnnummer = pdupaylad [startpos]; = (smsnumberlen + 1) / 2 + 1; byte [] mtp_da = new Byte [MTP_DA_LEN]; System.ArrayCopy (PDUPAYLOAD, STARTPOS + 1, MTP_DA, 0, MTP_DA_LEN * 1); byte mtp_da_da = mtp_da [0]; byte [mtp_da.length - 1]; (smsNumberraw [j] & 0xf);} else {smsNumber = smsNumber + (int) ((smsNumberraw [j] & 0x0ff) >> 4); PDUPAYLOAD [STARTPOS + 1]; //#"00" bedeutet, 7-Bit-Codierung zu verwenden, auf "02" für die Verwendung von 8-Bit-Codierung eingestellt und auf "08" eingestellt, um die UCS2-Codierung zu verwenden. startpos = startpos + 2; if (tp_vpf == 2) {startpos = startpos + 1;} else if (tp_vpf == 1 || TP_VPF == 3) {startpos = startpos + 7;} //## long sms: 6 fields müssen vorgeschlagen werden. 0x05; //# 2. Byte 2: Die Art des Headers füllt 0x00 fixiert, was auf lange SMS anzeigt; //# 3. Byte 3: Die Länge der Unterpackung füllen Sie 0x03 fixiert aus, was die Länge der nächsten drei Bytes anzeigt; //# 4. Byte 4 bis Byte 6: Paketinhalt: //# a) Byte 4: Langzeitnachrichtenreferenznummer. Jede von jedem SP an jeden Benutzer gesendete Referenznummer sollte unterschiedlich sein. Sie können jedes Mal von 0 und 1 mit maximal 255 hinzufügen, damit das gleiche Terminal unterschiedliche lange Nachrichten von Nachrichten derselben SP identifizieren kann. //# b) Byte 5: Die Gesamtzahl der Nachrichten in dieser langen Nachricht von 1 bis 255 sollte der Wert im Allgemeinen größer als 2 sein. //# c) Byte 6: Die Position oder Sequenznummer dieser Nachricht in der langen Nachricht von 1 bis 255 ist der erste 1, der zweite ist 2 und der letzte ist gleich dem Wert des vierten Byte. //# Beispiel: //# 05 00 03 00 02 01 //# 05 00 03 00 02 02 int smspayloadlen = pDUpayload [startpos]; startpos = startpos + 1; String smscontent = ""; + 4]; byte smsidx = pDUpayload [startpos + 5]; startpos = startpos + 6; smscontent = "Long sms (" + bytetohex (smsidx) + "/" + bytetohex (Smstotal) + "}"; smscontent = new String (SmsCscontent.get.GETS. ("GBK"); smspayloadlen - 6;} byte [] smspayload = new byte [pDUpayload.length - startpos]; System.ArrayCopy (pDUpayload, startpos, smspayload, 0, pDUpayload.Length - startpos); 7 + 7) / 8; int asciidata = 0; int less lindByteremain = 0; für (int i = 0; i <smspayloadlen; i ++) {asciidata = asciidata + ((smspayload [i] & 0x0ff) << lastByteremain); smscontent = smscontent = smscontent + (char) ((char) ((char) (char) (char) (char) ((char) (char) ((char) (char) (char) (char) (char) (char) (char) (char) (char) () () ()ömere 0x7f); asciidata = asciidata >> 7; lastByteremain = lastByteremain + 1; if (lastByteremain> = 7) {smscontent = smscontent + (char) ((asciidata & 0x0ff) & 0x7f); (MTP_DCS == 8) {//# ucS-2-verifiziert, normal für (int i = 0; i <smspayloadlen; i = i + 2) {int cc1 = (smspayload [i] & 0x0ff) * 256; int cc2 = smspayload [i + 1] & 0x0ff; smscontent = smscontent + (char) (cc1 + cc2);}} return smsnumber + ":" + smscontent;}}}}}}}Das obige ist eine umfassende Analyse der vom Herausgeber eingeführten Java -PDU -SMS -Dekodierung. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!