国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java pdu短信解碼全面解析

2019-11-26 13:39:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

長(zhǎng)短信未驗(yàn)證 有興趣的可以試試

根據(jù)python的方法改寫(xiě)的

/*** PDU短信解析*** @param pduPayload* @return*/public static String retrieveSMSInfo(byte[] pduPayload) throws UnsupportedEncodingException {int startPos = 3;//#Originator addressint mRP_OA_len = pduPayload[startPos];byte[] mRP_OA = new 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 No. 7 6 5 4 3 2 1 0 //#uplink TP-RP 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];byte TP_Msg_Ref = pduPayload[startPos + 2];int TP_UDHI = (TP_Header >> 6) & 1; //#短信內(nèi)容是否包含協(xié)議頭信息,0 不包含, 1 包含(長(zhǎng)短信,push短信)int TP_VPF = (TP_Header >> 3) & 3; //#是否包含有效期字節(jié),0 不包含, 其他 包含 // #00表示無(wú)有效期,TP-VP設(shè)置為00。 // #10表示相對(duì)格式,TP-VP占用1字節(jié)。 // #01表示增加格式,TP-VP占用7字節(jié)。 // #11表示絕對(duì)格式,TP-VP占用7字節(jié)int TP_MMS = (TP_Header >> 2) & 1;//# TP-MMS(TP-More-Message-to-Send):1 短信中心沒(méi)有更多的消息發(fā)送startPos = startPos + 3;//#對(duì)方號(hào)碼byte smsNumberLen = pduPayload[startPos];int mTP_DA_len = (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[] smsNumberRaw = new 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++) {if ((i & 1) == 0) {smsNumber = smsNumber + (int) (smsNumberRaw[j] & 0xF);} else {smsNumber = smsNumber + (int) ((smsNumberRaw[j] & 0x0FF) >> 4);j++;}}startPos = startPos + 1 + mTP_DA_len;byte mTP_PID = pduPayload[startPos];byte mTP_DCS = pduPayload[startPos + 1];//#“00”表示使用7位編碼,設(shè)置為“02”使用8位編碼,設(shè)置為“08”使用UCS2編碼。startPos = startPos + 2;if (TP_VPF == 2) {startPos = startPos + 1;} else if (TP_VPF == 1 || TP_VPF == 3) {startPos = startPos + 7;}//# 長(zhǎng)短信:內(nèi)容前面需要增加6個(gè)字段 //# 1、 字節(jié)一:包頭長(zhǎng)度,固定填寫(xiě)0x05; //# 2、 字節(jié)二:包頭類(lèi)型標(biāo)識(shí),固定填寫(xiě)0x00,表示長(zhǎng)短信; //# 3、 字節(jié)三:子包長(zhǎng)度,固定填寫(xiě)0x03,表示后面三個(gè)字節(jié)的長(zhǎng)度; //# 4、 字節(jié)四到字節(jié)六:包內(nèi)容: //# a) 字節(jié)四:長(zhǎng)消息參考號(hào),每個(gè)SP給每個(gè)用戶發(fā)送的每條參考號(hào)都應(yīng)該不同,可以從0開(kāi)始,每次加1,最大255,便于同一個(gè)終端對(duì)同一個(gè)SP的消息的不同的長(zhǎng)短信進(jìn)行識(shí)別; //# b) 字節(jié)五:本條長(zhǎng)消息的的總消息數(shù),從1到255,一般取值應(yīng)該大于2; //# c) 字節(jié)六:本條消息在長(zhǎng)消息中的位置或序號(hào),從1到255,第一條為1,第二條為2,最后一條等于第四字節(jié)的值。 //# 例子: //# 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) {//#長(zhǎng)短信--未驗(yàn)證 可能需要轉(zhuǎn)無(wú)符號(hào)byte smsTotal = pduPayload[startPos + 4];byte smsIdx = pduPayload[startPos + 5];startPos = startPos + 6;smsContent = "長(zhǎng)短信(" + byteToHex(smsIdx) + "/" + byteToHex(smsTotal) + "}";smsContent = new String(smsContent.getBytes("gbk"));smsPayloadLen = smsPayloadLen - 6;}byte[] smsPayload = new byte[pduPayload.length - startPos];System.arraycopy(pduPayload, startPos, smsPayload, 0, pduPayload.length - startPos);if (mTP_DCS == 0) {//#7位編碼--已驗(yàn)證smsPayloadLen = (smsPayloadLen * 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);asciiData = asciiData >> 7;lastByteRemain = lastByteRemain + 1;if (lastByteRemain >= 7) {smsContent = smsContent + (char) ((asciiData & 0x0FF) & 0x7f);asciiData = asciiData >> 7;lastByteRemain = lastByteRemain - 7;}}} else if (mTP_DCS == 8) {//# UCS-2 --已驗(yàn)證 可正常解析for (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短信解碼全面解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汾西县| 绥棱县| 陇西县| 泸西县| 桃园县| 梁河县| 鹤岗市| 万安县| 淮滨县| 清新县| 南川市| 沐川县| 榆树市| 石林| 韶山市| 泾阳县| 堆龙德庆县| 尤溪县| 青冈县| 泸溪县| 富蕴县| 名山县| 丰宁| 章丘市| 横峰县| 临高县| 岐山县| 靖边县| 洱源县| 瓮安县| 嘉黎县| 巴中市| 万安县| 库尔勒市| 大理市| 呼玛县| 饶河县| 阜新市| 平湖市| 永泰县| 栖霞市|