Si está interesado en mensajes de texto largos, puede probarlo
Reescribir según el método de Python
/*** Análisis de SMS PDU *** @param pdupayload* @return*/public static string RemiVESSMSInfo (byte [] pdupayload) lanza UnsupportedEnCodingEdingException {int startPos = 3; //#Originator direcciones MRP_OA_LEN = PDUPAYLOAD [startPos]; byte [] mRP_OA = newAa = newAintator MRP_OA_LEN = PDUPAYLOAD [startPos]; byte [] MRP_OA = NewAa = NewAin 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 n. TP-UDHI TP-SPR TP-VPF TP-RD TP-MTI //#Downlink TP-RP TP-UDHI TP-SRI TP-MMS TP-MTI BYTE TP_HEADER = PDUPAYLOOCI & 1; // Si el contenido del mensaje de texto contiene información del encabezado del protocolo, 0 no incluye, 1 contiene (mensaje de texto largo, mensaje de texto de presentación) int tp_vpf = (tp_header >> 3) y 3; // Si el mensaje de texto contiene bytes de período válido, 0 no incluye, otros incluyen // #00 significa que no hay un período válido, TP-VP se establece en 00. // #10 representa el formato relativo y TP-VP toma 1 byte. // #01 significa agregar formato, TP-VP ocupa 7 bytes. //#11 significa formato absoluto, tp-vp toma 7 bytes int tp_mms = (tp_header >> 2) & 1; //#tp-mms (tp-more-message a-send): 1 No hay más mensajes enviados en el centro sms startPos = startPos + 3; // ## opular byte smsnumberlen = pduPayLoad [startPos]; INT MTTA_DA_DA_DA_DA_DA = (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 [] smsnumber 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 ++) {(((i & 1) == 0) {smsnumber (smsnumberraw [j] & 0xf);} else {smsnumber = smsnumber + (int) ((smsnumberraw [j] & 0x0ff) >> 4); j ++;}} startpos = startpos + 1 + mtp_da_len; byte mtp_pid = pdupayload [startPos]; pdupayload [startPos + 1]; //#"00" significa usar la codificación de 7 bits, establecer en "02" para usar la codificación de 8 bits y establecer en "08" para usar la codificación 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 campos deben agregarse frente al contenido //# 1. byte 1: la longitud de la cabeza, fijada, fijada, fijación de los campos. 0x05; //# 2. BYTE 2: El tipo de encabezado, llena fijamente 0x00, que indica SMS largos; //# 3. Byte 3: La longitud de la subpacket, llena fijamente 0x03, lo que indica la longitud de los siguientes tres bytes; //# 4. BYTE 4 A BYTE 6: Contenido del paquete: //# A) BYTE 4: Número de referencia de mensaje largo. Cada número de referencia enviado por cada SP a cada usuario debe ser diferente. Puede comenzar desde 0 y agregar 1 cada vez, con un máximo de 255, para que el mismo terminal pueda identificar diferentes mensajes largos de mensajes del mismo SP; //# B) BYTE 5: El número total de mensajes en este mensaje largo, de 1 a 255, generalmente el valor debe ser mayor que 2; //# C) Byte 6: La posición o número de secuencia de este mensaje en el mensaje largo, de 1 a 255, el primero es 1, el segundo es 2, y el último es igual al valor del cuarto byte. //# Ejemplo: //# 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 SmsS-Sms Unverified puede requerido por et alte smstotal + 4]; byte smsidx = pdupayload [startPos + 5]; startPos = startPos + 6; smsContent = "long sms (" + bytetohex (smsidx) + "/" + bytetohex (smstotal) + "}"; smscontent = new String (smScontent.getbybytes ("gbk");; smspaygay = smSpaygay - 6;} byte [] smSpayLoad = new Byte [pdupayload.length - startPos]; system.arrayCopy (pdupayload, startPos, smspayload, 0, pdupayload.length - startPos); if (mtp_dcs == 0) {//##7 bitscoding -verificado smspayLoadlen = (smsspay * 7 + 7 + 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 & 0x0ff) & 0x7f); smsContent = smScontent 7; LastByterEmain = LastByterEmain + 1; if (lastByterEmain> = 7) {smsContent = smsContent + (char) ((asciidata & 0x0ff) & 0x7f); asciidata = asciidata >> 7; lastbybyMain = lastbybybyteremain -7;}}} if (mtp_dcs == 8) Verificado para ser analizado normalmente para (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;}Lo anterior es un análisis completo de la decodificación de SMS de Java PDU introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!