'+calculation+'
'; a=myWin.document; a.open(); a.write(b); a.close(); } } // Function to get SMSmeta info information from PDU String function getPDUMetaInfo(inp) { var PDUString = inp; var start = 0; var out=""; // Silently Strip leading AT command if (PDUString.substr(0,2)=="AT") { for(var i=0;i= 8) { timezone -= 8; timezone = timezone + timeStamp.substring(13,14); // Concats :: yeuck timezone = -timezone; timeStamp += "-"; } else { timezone = timezone + timeStamp.substring(13,14); // Concats :: yeuck timeStamp += "+"; } timeStamp += timezone/4; */ start +=14; // Commonish... var messageLength = HexToNum(PDUString.substr(start,2)); start += 2; var bitSize = DCS_Bits(tp_DCS); var userData = "Undefined format"; if (bitSize==7) { userData = getUserMessage(PDUString.substr(start,PDUString.length-start),messageLength); } else if (bitSize==8) { userData = getUserMessage8(PDUString.substr(start,PDUString.length-start),messageLength); } else if (bitSize==16) { userData = getUserMessage16(PDUString.substr(start,PDUString.length-start),messageLength); } userData = userData.substr(0,messageLength); if (bitSize==16) { messageLength/=2; } out += "SMSC#"+SMSC_Number+"\nSender:"+sender_number+"\nTimeStamp:"+timeStamp+"\nTP_PID:"+tp_PID+"\nTP_DCS:"+tp_DCS+"\nTP_DCS-popis:"+tp_DCS_desc+"\n"+userData+"\nLength:"+messageLength; } else { out = "Status Report\n"; var MessageReference = HexToNum(PDUString.substr(start,2)); // ??? Correct this name start = start + 2; // length in decimals var sender_addressLength = HexToNum(PDUString.substr(start,2)); if(sender_addressLength%2 != 0) { sender_addressLength +=1; } start = start + 2; var sender_typeOfAddress = PDUString.substr(start,2); start = start + 2 var sender_number = semiOctetToString(PDUString.substring(start,start+sender_addressLength)); if((sender_number.substr(sender_number.length-1,1) == 'F') || (sender_number.substr(sender_number.length-1,1) == 'f' )) { sender_number = sender_number.substring(0,sender_number.length-1); } if (sender_typeOfAddress == 91) { sender_number = "+" + sender_number; } start +=sender_addressLength; var timeStamp = semiOctetToString(PDUString.substr(start,14)); // get date var year = timeStamp.substring(0,2); var month = timeStamp.substring(2,4); var day = timeStamp.substring(4,6); var hours = timeStamp.substring(6,8); var minutes = timeStamp.substring(8,10); var seconds = timeStamp.substring(10,12); var timezone = timeStamp.substring(12,14); timeStamp = day + "/" + month + "/" + year + " " + hours + ":" + minutes + ":" + seconds + " GMT +" + timezone/4; start +=14; var timeStamp2 = semiOctetToString(PDUString.substr(start,14)); // get date var year2 = timeStamp2.substring(0,2); var month2 = timeStamp2.substring(2,4); var day2 = timeStamp2.substring(4,6); var hours2 = timeStamp2.substring(6,8); var minutes2 = timeStamp2.substring(8,10); var seconds2 = timeStamp2.substring(10,12); var timezone2 = timeStamp.substring(12,14); timeStamp2 = day2 + "/" + month2 + "/" + year2 + " " + hours2 + ":" + minutes2 + ":" + seconds2 + " GMT +" + timezone2/4; start +=14; var mStatus = PDUString.substr(start,2); out += "SMSC#\n"+SMSC_Number+"\nSender:\n"+sender_number+"\nMessage Ref#:\n"+MessageReference+"\nTimeStamp:\n"+timeStamp+"\nTimeStamp2:\n"+timeStamp2 + "\nStatus Byte: " + mStatus; } return out; } // function that print the default alphabet to a String function printDefaultAlphabet() { var out = ""; out = ""; out = out + ""; for(var i=0;i"; } out = out +"
#characterASCII Codebits
"+ i + "" +sevenbitdefault[i] + " " + sevenbitdefault[i].charCodeAt(0) + ""+intToBin(sevenbitdefault[i].charCodeAt(0),8)+ "
"; return out; } // function to make a new window function show(title,text) { myWin=open('','','width=350,height=500,resizable=no,location=no,directories=no,toolbar=no,status=no,scrollbars=yes'); var b=''+title+'
'+ text +'
'; a=myWin.document; a.open(); a.write(b); a.close(); } function stringToPDU(inpString,phoneNumber,smscNumber,size,mclass,valid,receipt) // AJA fixed SMSC processing { var bitSize = size[0].value * size[0].checked | size[1].value * size[1].checked | size[2].value * size[2].checked; var octetFirst = ""; var octetSecond = ""; var output = ""; //Make header var SMSC_INFO_LENGTH = 0; var SMSC_LENGTH = 0; var SMSC_NUMBER_FORMAT = ""; var SMSC = ""; if (smscNumber != 0) { SMSC_NUMBER_FORMAT = "81"; // national if (smscNumber.substr(0,1) == '+') { SMSC_NUMBER_FORMAT = "91"; // international smscNumber = smscNumber.substr(1); } else if (smscNumber.substr(0,1) !='0') { SMSC_NUMBER_FORMAT = "91"; // international } if(smscNumber.length%2 != 0) { // add trailing F smscNumber += "F"; } SMSC = semiOctetToString(smscNumber); SMSC_INFO_LENGTH = ((SMSC_NUMBER_FORMAT + "" + SMSC).length)/2; SMSC_LENGTH = SMSC_INFO_LENGTH; } if(SMSC_INFO_LENGTH < 10) { SMSC_INFO_LENGTH = "0" + SMSC_INFO_LENGTH; } var firstOctet; // = "1100"; if (receipt.checked) { if (document.pduToStringForm.vFlag.checked) { firstOctet = "3100"; // 18 is mask for validity period // 10 indicates relative } else { firstOctet = "2100"; } } else { if (document.pduToStringForm.vFlag.checked) { firstOctet = "1100"; } else { firstOctet = "0100"; } } var REIVER_NUMBER_FORMAT = "81"; // national if (phoneNumber.substr(0,1) == '+') { REIVER_NUMBER_FORMAT = "91"; // international phoneNumber = phoneNumber.substr(1); //,phoneNumber.length-1); } else if (phoneNumber.substr(0,1) !='0') { REIVER_NUMBER_FORMAT = "91"; // international } var REIVER_NUMBER_LENGTH = intToHex(phoneNumber.length); if(phoneNumber.length%2 != 0) { // add trailing F phoneNumber += "F"; } var REIVER_NUMBER = semiOctetToString(phoneNumber); var PROTO_ID = "00"; var DCS=0; if (mclass != -1) // AJA { DCS = mclass | 0x10; } switch(bitSize) { case 7: break; case 8: DCS = DCS | 4; break; case 16: DCS = DCS | 8; break; } var DATA_ENCODING = intToHex(DCS); // var DATA_ENCODING = "00"; // Default // if (bitSize == 8) // { // DATA_ENCODING = "04"; // } // else if (bitSize == 16) // { // DATA_ENCODING = "08"; // } var VALID_PERIOD = ""; // AA if (document.pduToStringForm.vFlag.checked) { VALID_PERIOD = intToHex(valid); // AA } var userDataSize; if (bitSize == 7) { userDataSize = intToHex(inpString.length); for(var i=0;i<=inpString.length;i++) { if(i==inpString.length) { if (octetSecond != "") // AJA Fix overshoot { output = output + "" + (intToHex(binToInt(octetSecond))); } break; } var current = intToBin(getSevenBit(inpString.charAt(i)),7); var currentOctet; if(i!=0 && i%8!=0) { octetFirst = current.substring(7-(i)%8); currentOctet = octetFirst + octetSecond; //put octet parts together output = output + "" + (intToHex(binToInt(currentOctet))); octetSecond = current.substring(0,7-(i)%8); //set net second octet } else { octetSecond = current.substring(0,7-(i)%8); } } } else if (bitSize == 8) { userDataSize = intToHex(inpString.length); var CurrentByte = 0; for(var i=0;i>8 )) + ( ToHex( myChar&0xff ) ); } } var header = SMSC_INFO_LENGTH + SMSC_NUMBER_FORMAT + SMSC + firstOctet + REIVER_NUMBER_LENGTH + REIVER_NUMBER_FORMAT + REIVER_NUMBER + PROTO_ID + DATA_ENCODING + VALID_PERIOD + userDataSize; var PDU = header + output; var AT = "AT+CMGS=" + (PDU.length/2 - SMSC_LENGTH - 1) ; // Add /2 for PDU length AJA - I think the SMSC information should also be excluded // var bStep=18; // for(var breakUp=1;breakUp*bStep < PDU.length;breakUp++) // { // PDU = PDU.substr(0,breakUp*bStep+breakUp-1) + " " + PDU.substr(breakUp*bStep+breakUp-1); // } //CMGW return AT + "\n" + PDU; } function change (what) { var keysSoFar = what.value.length; if (keysSoFar > maxkeys) { if (!alerted) { alert ('Max length '+ maxkeys + '!'); } what.value = what.value.substring (0, maxkeys); //chop alerted = true; keysSoFar = maxkeys; } window.status = "Characters left : " + (maxkeys - keysSoFar); } function DCS_Bits(tp_DCS) { var AlphabetSize=7; // Set Default //alert(tp_DCS); var pomDCS = HexToNum(tp_DCS); //alert(pomDCS); switch(pomDCS & 192) { case 0: if(pomDCS & 32) { // tp_DCS_desc="Compressed Text\n"; } else { // tp_DCS_desc="Uncompressed Text\n"; } switch(pomDCS & 12) { case 4: AlphabetSize=8; break; case 8: AlphabetSize=16; break; } break; case 192: switch(pomDCS & 0x30) { case 0x20: AlphabetSize=16; break; case 0x30: if (pomDCS & 0x4) { ; } else { AlphabetSize=8; } break; } break; } return(AlphabetSize); } function tpDCSMeaning(tp_DCS) { var tp_DCS_desc=tp_DCS; var pomDCS = HexToNum(tp_DCS); switch(pomDCS & 192) { case 0: if(pomDCS & 32) { tp_DCS_desc="Compressed Text\n"; } else { tp_DCS_desc="Uncompressed Text\n"; } if(!(pomDCS & 16)) // AJA { tp_DCS_desc+="No class\n"; } else { tp_DCS_desc+="class:"; switch(pomDCS & 3) { case 0: tp_DCS_desc+="0\n"; break; case 1: tp_DCS_desc+="1\n"; break; case 2: tp_DCS_desc+="2\n"; break; case 3: tp_DCS_desc+="3\n"; break; } } tp_DCS_desc+="Alphabet:"; switch(pomDCS & 12) { case 0: tp_DCS_desc+="Default\n"; break; case 4: tp_DCS_desc+="8bit\n"; break; case 8: tp_DCS_desc+="UCS2(16)bit\n"; break; case 12: tp_DCS_desc+="Reserved\n"; break; } break; case 64: case 128: tp_DCS_desc ="Reserved coding group\n"; break; case 192: switch(pomDCS & 0x30) { case 0: tp_DCS_desc ="Message waiting group\n"; tp_DCS_desc+="Discard\n"; break; case 0x10: tp_DCS_desc ="Message waiting group\n"; tp_DCS_desc+="Store Message. Default Alphabet\n"; break; case 0x20: tp_DCS_desc ="Message waiting group\n"; tp_DCS_desc+="Store Message. UCS2 Alphabet\n"; break; case 0x30: tp_DCS_desc ="Data coding message class\n"; if (pomDCS & 0x4) { tp_DCS_desc+="Default Alphabet\n"; } else { tp_DCS_desc+="8 bit Alphabet\n"; } break; } break; } //alert(tp_DCS.valueOf()); return(tp_DCS_desc); } function checkFlag(valid) { if (valid.checked) { document.pduToStringForm.valid.disabled = false; document.pduToStringForm.valid.value = "170"; document.getElementById('validy').innerHTML=cValid("170"); } else { document.pduToStringForm.valid.disabled = true; document.pduToStringForm.valid.value = ""; document.getElementById('validy').innerHTML=""; } } function Validity(valid) { var byValidityPeriod = 0; if (isNaN(parseInt(valid))) { valid = 0; document.pduToStringForm.valid.value = valid; } else { valid=parseInt(valid); if (valid <0) { valid = 0; document.pduToStringForm.valid.value = valid; } if (valid>255) { valid = 255; document.pduToStringForm.valid.value = valid; } } return cValid(valid); } function cValid(valid) { var value,out=""; // if (isNaN(parseInt(valid))) // { // alert("No text please we're British!"); // } valid=parseInt(valid); if (valid <= 143) { value = (valid+1)*5; // Minutes } else if (valid <= 167) { value = ((valid-143) / 2 + 12); // Hours value *= 60; // Convert to Minutes } else if (valid <= 196) { value = valid-166; // days value *= 60*24; // Convert to Minutes } else { value = valid-192; // Weeks value *= 7*60*24; // Convert to Minutes } var mins,hours,days,weeks; mins = value % 60; hours = value / 60; days = hours / 24; weeks = days / 7; hours %= 24; days %= 7; if (parseInt(weeks) != 0) { out += parseInt(weeks) + "w "; } if (parseInt(days) != 0) { out += parseInt(days) + "d "; } if (parseInt(hours) != 0) { out += parseInt(hours) + "h "; } if (mins != 0) { out += mins + "m "; } return out; } //document.pduToStringForm.valid.disabled = false;
金笛短信PDU编码解码工具
PDU Format Converter (Encoder/Decoder) for GSM SMS.

PDU SMS message creatorHexadecimal PDU Message Entry/DisplayResultant 7/8/16 Bit readable PDU Message
SMSC
Receiver
Alphabet Size 7816
Message Class
Receipt
Validity (Relative)







chundi wechat official account ÆÁÉ½ÏØ| ½«ÀÖÏØ| ÀëµºÇø| ÎÄË®ÏØ| ¾ÆÈªÊÐ| ²©ÐËÏØ| ¹ãÈÄÏØ| ¾¸½­ÊÐ| ¶«Ý¸ÊÐ| ¡²ýÏØ| ÁùÖ¦ÌØÇø| ·ÊÏçÏØ| ÎâÇÅÏØ| ¿Ëʲ¿ËÌÚÆì| ÉäÑôÏØ| ¶«¸ÛÊÐ| ´ó»¯| Î¼Ô´ÏØ| ÓÀ¿µÊÐ| Ù¤Ê¦ÏØ| ½­½òÊÐ| Èð²ýÊÐ| ͳ·¬ÊÐ| вÌÏØ| ÄþÝõ| Þ­´ºÏØ| Áú¾®ÊÐ| ¸»ÔÌÏØ| ľÀ¼ÏØ| ·À³Ç¸ÛÊÐ| ÅíÔóÏØ| ñçÑôÊÐ| ÂíÁúÏØ| ÏʳÇ| °ö²ºÊÐ| ÒÁ´ºÊÐ| °¢À­ÉÆÃË| µÂ»¯ÏØ| ¶î¶û¹ÅÄÉÊÐ| ÐÂÃÜÊÐ| ÖÎÏØ¡£|