긴 문자 메시지에 관심이 있으시면 시도해 볼 수 있습니다.
Python 방법에 따라 다시 작성하십시오
/*** PDU SMS 분석 *** @param pdupayload* @return*/public static String retrievesmsinfo (byte [] pdupayload) 던지기 unsupportedencodingexception {int startpos = 3; //#outsinter addressInt mrp_oa_len = pdupayload [start]; byte [] mrp_oa = 새로운 바이트 [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 3 3 UPUT TP-r PS. tp-spr tp-vpf tp-rd tp-mti //#다운 링크 tp-rp tp-udhi tp-sri tp-mms tp-mti byte tp_header = pdupayload [startpos + 1]; byte tp_msg_ref = pdupayload [start + 2]; int tp_udhi = (tp_udhi = int tp_udhi =; // 문자 메시지 컨텐츠에 프로토콜 헤더 정보가 포함되어 있는지, 0은 포함되지 않음, 1은 (긴 문자 메시지, 푸시 문자 메시지) int tp_vpf = (tp_header >> 3) & 3; // 문자 메시지에 유효한 기간이 포함되어 있는지, 0에는 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 Center startpos에서 더 이상 전송되지 않음 startpos = startpos + 3; // ## Opular Numbte SMSNUMBERLEN = PDUPAYLOND [int MTP _; (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 [] smstaw [0]; 바이트 [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 (if (i & 1) {smsnumber = sm+) (smsnumberraw [j] & 0xf);} else {smsnumber = smsnumber + (int) ((smsnumberRaw [j] & 0x0ff) >> 4); pdupayload [startpos + 1]; //#"00"는 7 비트 인코딩을 사용하고 "02"로 설정하여 8 비트 인코딩을 사용하고 "08"으로 설정하여 UCS2 인코딩을 사용하는 것을 의미합니다. startpos = startpos + 2; if (tp_vpf == 2) {startpos = startpos + 1;} else (tp_vpf == 1 || tp_vpf == 3) {startpos = startpos + 7;} //# 긴 SMS : 6 개의 필드가 내용물 앞에서 추가되어야합니다. //# 2. 바이트 2 : 머리글 유형은 0x00을 고정으로 채우고 긴 SMS를 나타냅니다. //# 3. 바이트 3 : 서브 포켓의 길이는 0x03을 고정으로 채우고 다음 3 바이트의 길이를 나타냅니다. //# 4. 바이트 4 ~ 바이트 6 : 패키지 내용 : //# a) 바이트 4 : 긴 메시지 참조 번호. 각 사용자에게 각 SP가 전송하는 각 참조 번호는 다릅니다. 동일한 터미널이 동일한 SP의 다른 긴 메시지를 식별 할 수 있도록 최대 255 개로 0에서 시작하고 매번 1을 추가 할 수 있습니다. //# b) 바이트 5 :이 긴 메시지의 총 메시지 수는 1에서 255까지 일반적으로 값은 2보다 크기가 높아야합니다. //# c) 바이트 6 :이 메시지의 위치 또는 시퀀스 번호는 1 ~ 255 사이의 긴 메시지에서 1, 첫 번째는 1, 두 번째는 2이고 마지막은 네 번째 바이트의 값과 같습니다. //# 예 : //# 05 00 03 00 02 01 //# 05 00 03 00 02 02 int smspayloadlen = pdupayload [startpos = startpos + 1; String smscontent = ""; 4]; byte smsidx = pdupayload [startpos + 5]; startpos = startpos + 6; smscontent = "long sms (" + bytetohex (smsidx) + "/" + bytetohex (smstotal) + "}"; smscontent = new String (smscontent.- smspaylen); 6;} byte [] smspayload = new byte [pdupayload.length -startpos]; system.arraycopy (pdupayload, startpos, smspayload, 0, pdupayload.length -startpos); if (mtp_dcs == 0) {//#7 -bit Encoding -Verified Smspayloadlen = (smspay * 7). asciidata = 0; int lastBeyteremain = 0; for (int i = 0; i <smspayloadlen; i ++) {asciidata = asciidata + ((smspayload [i] & 0x0ff) << lastbyteremain); smscontent = smscontent + (char) ((asciidata & 0x0ff) & 0x7f); asciidata >> 7; lastBeyteremain = lastBeyteremain + 1; if (lastBeyteremain> = 7) {smscontent = smscontent + (char) ((asciidata & 0x0ff) & 0x7f); asciidata = asciidata >> 7; lastberemain = lastbyteremain -7;}}}}}}}}}}}}}}}}} {//# ucs-2- 정상적으로 구문 분석되는 것으로 확인되었습니다 (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;}위는 편집자가 도입 한 Java PDU SMS 디코딩에 대한 포괄적 인 분석입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!