หากคุณสนใจข้อความยาวคุณสามารถลองได้
เขียนใหม่ตามวิธี Python
/*** การวิเคราะห์ SMS PDU *** @param pdupayload* @return*/สตริงคงที่สาธารณะดึงข้อมูล SINDESMSINFO (BYTE [] PDUPAYLOAD) โยน unsupportencodexception {int startPos = 3; //# BYTE [MRP_OA_LEN]; System.ArrayCopy (pdupayload, startpos + 1, mrp_oa, 0, mrp_oa_len); startpos = startpos + 1 + mrp_oa_len; int mtpdu_len = pdupay load [startpos]; 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; // ไม่ว่าเนื้อหาข้อความจะมีข้อมูลส่วนหัวโปรโตคอล 0 ไม่รวม 1 มี (ข้อความยาวข้อความกดข้อความ) int tp_vpf = (tp_header >> 3) & 3; // ไม่ว่าข้อความตัวอักษรจะมีช่วงเวลาที่ถูกต้องไบต์หรือไม่ไม่รวมตัวอื่นรวมถึง // #00 หมายความว่าไม่มีระยะเวลาที่ถูกต้องหรือไม่ TP-VP ถูกตั้งค่าเป็น 00 // #10 แสดงถึงรูปแบบสัมพัทธ์และ TP-VP ใช้เวลา 1 ไบต์ // #01 หมายถึงการเพิ่มรูปแบบ TP-VP ใช้เวลา 7 ไบต์ //#11 หมายถึงรูปแบบสัมบูรณ์ TP-VP ใช้เวลา 7 ไบต์ int tp_mms = (tp_header >> 2) & 1; //#tp-mm (smsnumberlen + 1) / 2 + 1; byte [] mtp_da = ไบต์ใหม่ [mtp_da_len]; system.arraycopy (pdupayload, startpos + 1, mtp_da, 0, mtp_da_len * 1); BYTE [mtp_da.length - 1]; system.arraycopy (mtp_da, 1, smsnumberraw, 0, mtp_da.length - 1) สตริง smsnumber = "" int j = 0; สำหรับ (int i = 0; (smsnumberraw [j] & 0xf);} else {smsnumber = smsnumber + (int) ((smsnumberraw [j] & 0x0ff) >> 4); j ++;}} startpos = startpos + 1 + mtp_da_len; pdupayload [startpos + 1]; //#"00" หมายถึงการใช้การเข้ารหัส 7 บิตตั้งค่าเป็น "02" เพื่อใช้การเข้ารหัส 8 บิตและตั้งค่าเป็น "08" เพื่อใช้การเข้ารหัส UCS2 startPos = startPos + 2; if (tp_vpf == 2) {startPos = startPos + 1;} อื่นถ้า (tp_vpf == 1 || tp_vpf == 3) {startpos = startpos + 7; //# 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 = "" ถ้า (tp_udhi == 1) + 4]; byte smsidx = pdupayload [startpos + 5]; startpos = startpos + 6; smscontent = "sms ยาว (" + bytetohex (smsidx) + "/" + bytetohex (smstotal) + "}"; smscontent = สตริงใหม่ smspayloadlen - 6;} byte [] smspayload = byte ใหม่ [pdupayload.length - startpos]; system.arraycopy (pdupayload, startpos, smspayload, 0, pdupayload.length - startpos); if (mtp_dcs == 0) * 7 + 7) / 8; int asciidata = 0; int lastbyteremain = 0; สำหรับ (int i = 0; i <smspayloadlen; i ++) {asciidata = asciidata + (smspayload [i] & 0x0ff) << lastbyteremain); 0x7f); asciidata = asciidata >> 7; LastByteremain = LastByteremain + 1; ถ้า (LastByteremain> = 7) {smscontent = smscontent + (char) (asciidata & 0x0ff) & 0x7f); asciidata = asciidata (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 + "ข้างต้นเป็นการวิเคราะห์ที่ครอบคลุมของการถอดรหัส SMS Java PDU ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!