Если вы заинтересованы в длинных текстовых сообщениях, вы можете попробовать
Переписать в соответствии с методом Python
/*** PDU SMS -анализ *** @param PdupayLoad* @return*/public static String retrievesmsInfo (byte [] pdupayload) бросает UnsupportedEncodingException {int startpos = 3; //#indervator addrestint mrp_oa_len = pdupayload [startpos]; 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 № 7 4 4 4 3 1 0/##################################### TP-UDHI TP-SPR TP-VPF TP-RD TP-MTI //#DOWNLINK TP-RP TP-UDHI TP-SRI TP-MMS TP-MTI BYTE TP_HEADER = PDUPAYLOAD [Startpos + 1]; Byte TP_MSG_REF = PdupayLoad [startPos + 2]; 1; // Содержит ли содержимое текстового сообщения информацию заголовка протокола, 0 не включает, 1 содержит (длинное текстовое сообщение, нажмите текстовое сообщение) int tp_vpf = (tp_header >> 3) & 3; // Содержит ли текстовое сообщение допустимых байтов периода, 0 не включает, другие включают // #00 означает, что нет допустимого периода, TP-VP устанавливается на 00. // #10 представляет относительный формат, а TP-VP занимает 1 байт. // #01 означает добавление формата, TP-VP занимает 7 байтов. //#11 означает абсолютный формат, TP-VP занимает 7 байтов int tp_mms = (tp_header >> 2) & 1; //#tp-mms (tp-more-message-to-send): 1 больше сообщений, отправленных в SMS-центр startpos = startpos + 3; // ## opular number smsnumberlen = pdupayload [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_format = mtp_da [0]; byte [mtp_da.length - 1]; System.ArrayCopy (mtp_da, 1, smsnumberraw, 0, mtp_da.length - 1); String smsnumber = ""; int j = 0; for (int i = 0; i <smsnumberlen; i ++) {if (i & 1) = {smsmummerlen; i ++) (smsnumberraw [j] & 0xf);} else {smsnumber = smsnumber + (int) ((smsnumberraw [j] & 0x0ff) >> 4); j ++;}} startpos = startpos + 1 + mtp_da_len; byte mtp_pid = pdupayload]; Pdupayload [Startpos + 1]; //#"00" означает использовать 7-битное кодирование, установить на «02» для использования 8-битного кодирования, и установить на «08» для использования кодирования UCS2. startpos = startPos + 2; if (tp_vpf == 2) {startpos = startPos + 1;} else if (tp_vpf == 1 || tp_vpf == 3) {startpos = startpos + 7;} //# long Sms: 6 Пол. 0x05; //# 2. Байт 2: тип заголовка, фиксируемо заполняет 0x00, указывая на длинные SMS; //# 3. Байт 3: длина подпакета, пристально заполняя 0x03, указывая на длину следующих трех байтов; //# 4. Байт 4 до байта 6: Содержание пакета: //# a) Байт 4: Длинный ссылочный номер сообщения. Каждый ссылочный номер, отправляемый каждым SP каждому пользователю, должен отличаться. Вы можете начать с 0 и добавлять 1 каждый раз, максимум 255, так что один и тот же терминал может идентифицировать различные длинные сообщения о том же SP; //# B) Байт 5: общее количество сообщений в этом длинном сообщении, от 1 до 255, как правило, значение должно быть больше 2; //# C) Байт 6: Положение или номер последовательности этого сообщения в длинном сообщении, от 1 до 255, первый - 1, второй - 2, а последний равен значению четвертого байта. //# Пример: //# 05 00 03 00 02 01 //# 05 00 03 00 02 02 int smspayloadlen = pdupayload [startpos]; startpos = startpos + 1; string smscontent = ""; if (tp_udhi == 1) {//# long sms-unverif + 4]; byte smsidx = pdupayload [startpos + 5]; startpos = startpos + 6; smscontent = "long sms (" + bytetohex (smsidx) + "/" + bytetohex (smstotal) + "}"; smscontent = new String (smstybletes (gbkk "); - 6;} byte [] smspayload = new byte [pdupayload.length - startpos]; System.ArrayCopy (pdupayload, startpos, smspayload, 0, pdupayload.length - startpos); if (mtp_dcs == 0) {//#7 -bit -encoding -incoding -smodified smspayloadlen = ( * 7). 8; int asciidata = 0; int lastbyteremain = 0; for (int i = 0; i <smspayloadlen; i ++) {asciidata = asciidata + ((smspayload [i] & 0x0ff) << lastbyteremain); smscontent = smscontent + (char) (asciidata); asciiData >> 7;lastByteRemain = lastByteRemain + 1;if (lastByteRemain >= 7) {smsContent = smsContent + (char) ((asciiData & 0x0FF) & 0x7f);asciiData = asciiData >> 7;lastByteRemain = lastByteRemain - 7;}}} else if (mTP_DCS == 8) {//# ucs-2-проверено как нормально проанализировать (int i = 0; я <smspayloadlen; i = i + 2) {int cc1 = (smspayload [i] & 0x0ff) * 256; int cc2 = smspayload [i + 1] & 0x0ff; smscontent = smscontent + (char) (cc1 + cc2);}} return smsnumber + ":" + smscontent;};Вышеуказанное представляет собой всесторонний анализ декодирования SMS Java PDU, введенного редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!