Se você estiver interessado em longas mensagens de texto, pode tentar
Reescrever de acordo com o método Python
/*** PDU ANÁLISE SMS *** @param pduPayload* @return*/public static string recuperamssinfo (byte [] pduPayload) lança não suportesEnCodingException {int startpos = 3; //#Originator endereçontInt 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. 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]; & 1; // Se o conteúdo da mensagem de texto contém as informações do cabeçalho do protocolo, 0 não inclui 1 contém (mensagem de texto longa, mensagem de texto) int tp_vpf = (tp_header >> 3) & 3; // Se a mensagem de texto contém bytes de período válido, 0 não inclui, outros incluem // #00 significa que não há período válido, o TP-VP está definido como 00. // #10 representa o formato relativo e o TP-VP ocupa 1 byte. // #01 significa adicionar formato, o TP-VP ocupa 7 bytes. //#11 significa formato absoluto, o TP-VP ocupa 7 bytes int tp_mms = (tp_header >> 2) & 1; //#tp-mms (tp-more-message-to-send): 1 sem mais mensagens enviadas no sms startpos = startpos + 3; // [## ## ## smsnumbernlenLennEnnEnnEnNen (smsnumberlen + 1) / 2 + 1; byte [] mtp_da = novo byte [mtp_da_len]; system.arraycopy (pdupayload, startpos + 1, mtp_da_forma, 0, mtp_da_nen * 1); byte mtp_da_format = mtp_da_den * 1); byte [mtp_da.length - 1]; System.arraycopy (mtp_da, 1, smsnumberraw, 0, mtp_da.length - 1); string smsnumber = ""; int j = 0; para (int i = 0; i <smsnNumMen; i++) {se (smsnumberraw [j] & 0xf);} else {smsnumber = smsNumber + (int) ((smsNumberraw [j] & 0x0ff) >> 4); j ++;}} startPos = startpos + 1 + mtp_da_len; byte mtp_pid = pdid = mtp) pduPayload [startpos + 1]; //#"00" significa usar a codificação de 7 bits, defina como "02" para usar a codificação de 8 bits e definir como "08" para usar a codificação 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 fields precisam ser adicionados na frente do conteúdo 1; 0x05; //# 2. BYTE 2: O tipo de cabeçalho, preencha 0x00, indicando SMS longo; //# 3. BYTE 3: O comprimento do subpacket, preencha 0x03 fixamente, indicando o comprimento dos próximos três bytes; //# 4. Byte 4 para BYTE 6: Conteúdo do pacote: //# A) BYTE 4: Número de referência de mensagem longa. Cada número de referência enviado por cada SP a cada usuário deve ser diferente. Você pode começar de 0 e adicionar 1 de cada vez, com um máximo de 255, para que o mesmo terminal possa identificar diferentes mensagens longas de mensagens do mesmo SP; //# B) BYTE 5: O número total de mensagens nesta mensagem longa, de 1 a 255, geralmente o valor deve ser maior que 2; //# C) BYTE 6: A posição ou número de sequência desta mensagem na mensagem longa, de 1 a 255, a primeira é 1, a segunda é 2 e a última é igual ao valor do quarto byte. //# Exemplo: //# 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) {//# longo + 4]; byte smsidx = pduPayload [startpos + 5]; startpos = startpos + 6; smScontent = "sms long (" + bytetoHex (smsidx) + "/" + bytetoHex (smstotal) + "}"; smspayloadlen - 6;} byte [] smspayload = novo byte [pduPayload.length - startpos]; system.arraycopy (pduPayload, startpos, smspayload, 0, pDuPayload.length - startpos); if (mtp_dcs smsp ==l) 7 + 7) / 8; int asciidata = 0; int lastBytereMain = 0; para (int i = 0; i <smspayloadlen; i ++) {asciidata = asciidata + ((smspayload [i] & 0x0ff) << lastBeremain); smsContent = 0sSContent + (Char) (0x0ff) << lastBeremain); 0x7f); asciidata = asciidata >> 7; lastBytereMain = lastByteremain + 1; if (lastbytereMain> = 7) {smScontent = smScontent + (char) (asciidata e 0x0ff) e 0x7f); asciidata = asciidata >> (mtp_dcs == 8) {//# ucs-2-verificado para ser analisado normalmente para (int i = 0; i <smspayloadlen; i = i + 2) {int cc1 = (smspayload [i] e 0x0ff) * 256; int cc2 = smspayload [i + 1] & 0x0ff; smscontent = smscontent + (char) (cc1 + cc2);}} retornar smsnumber + ":" + smsCent;}O exposto acima é uma análise abrangente da decodificação Java PDU SMS introduzida pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!