إذا كنت مهتمًا بالرسائل النصية الطويلة ، فيمكنك تجربتها
أعد الكتابة وفقًا لطريقة Python
/*** تحليل SMS PDU *** param pdupayload* @return*/سلسلة ثابتة عامة RetrievesMsInfo (byte [] 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] ؛ tp-udhi tp-spr tp-vpf tp-rd tp-mti //#downlink tp-rp tp-udhi tp-sri tp-mms tp-mti byte tp_header = pdupay load [startPos + 1] و 1 ؛ // ما إذا كان محتوى الرسالة النصية يحتوي على معلومات رأس البروتوكول ، لا يتضمن 0 ، 1 يحتوي على (رسالة نصية طويلة ، وضغط رسالة نصية) int tp_vpf = (tp_header >> 3) & 3 ؛ // ما إذا كانت الرسالة النصية تحتوي على بايت فترة صالحة ، فإن 0 لا تتضمن ، فإن الآخرين يتضمنون // #00 أنه لا توجد فترة صالحة ، يتم تعيين TP-VP على 00. // #10 يمثل التنسيق النسبي ، ويأخذ TP-VP 1 بايت. // #01 يعني إضافة تنسيق ، TP-VP يأخذ 7 بايت. . = (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_dormat = 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 ؛ (smsnumberRaw [j] & 0xf) ؛} آخر {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 ؛} آخر إذا (tp_vpf == 1 || tp_vpf == 3) {startPos = startPos + 7 ؛ 0x05 ؛ //# 2. البايت 2: نوع الرأس ، يملأ بثبات 0x00 ، مما يشير إلى الرسائل القصيرة الطويلة ؛ //# 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 = " + 4] ؛ byte smsidx = pdupayload [startPos + 5] ؛ startPos = startPos + 6 ؛ smscontent = "sms long (" + bytetohex (smsidx) + "/" + bytetoHex (smstotal) + "}" - 6 ؛} byte [] smspayload = new byte [pdupayload.length - startPos] ؛ system.arraycopy (pdupayload ، startPos ، smspayload ، 0 ، pdupayload.length - startPos) ؛ if (mtp_dcs == 0) {// 7 -bit encoding -verfortion = ( 8 ؛ int asciidata = 0 ؛ int listberyteremain = 0 ؛ for (int i = 0 ؛ i <smspayloadlen ؛ i ++) {asciidata = asciidata + ((smspayload [i] & 0x0ff) << lastBherEmain) ؛ Asciidata >> 7 ؛ listberyteremain = lastBerEmain + 1 ؛ if (listberEmain> = 7) {smscontent = smscontent + (char) ((asciidata & 0x0ff) {//# 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) ؛}}ما سبق هو تحليل شامل لفك تشفير Java PDU SMS الذي أدخله المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!