本文以一個執行個體來解說AT指令發送PDU短信的全過程,假如我要發送下面的短信: 接收号碼:+8613602433649 短信内容:工作愉快! 杭州短信中心号碼: 聯通:+8613010360500 移動:+8613800571500 一、短信中心号碼處理:用字元串 addr 表示 1、将短資訊中心号碼去掉+号,看看長度是否為偶數,如果不是,最後添加F 即 addr = "+8613800200500" => addr = "8613800200500F" 2、将奇數位和偶數位交換。 => addr = "683108020005F0" 3、将短資訊中心号碼前面加上字元91,91是國際化的意思 => addr = "91683108020005F0" 4、算出 addr 長度,結果除2,格式化成2位的16進制字元串,16 / 2 = 8 => "08" => addr = "0891683108020005F0" 二、手機号碼處理:用字元串 phone 1、将手機号碼去掉+号,看看長度是否為偶數,如果不是,最後添加F 即 phone = "+8613602433649" => phone = "8613602433649F" 2、将手機号碼奇數位和偶數位交換。 => phone = "683106423346F9" 三、短資訊部分處理:用字元串 msg 表示 1、轉字元串轉換為Unicode代碼,例如“工作愉快!”的unicode代碼為 5DE54F5C61095FEBFF01 2、将 msg 長度除2,保留兩位16進制數,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg => msg = "0A5DE54F5C61095FEBFF01" 四、組合 1、手機号碼前加上字元串 11000D91(1100:固定,0D:手機号碼的長度,不算+号,十六進制表示,91:發送到手機為91,發送到小靈通為81), 即 phone = "11000D91" + phone => 11000D91683106423346F9 2、手機号碼後加上 000800 和剛才的短資訊内容,000800也寫死就可以了 即 phone = phone + "000800" + msg 即 11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01 => phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 3、phone 長度除以2,格式化成2位的十進制數 即 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25 五、是以要發送的内容為 //PDU格式發送 AT+CMGF=0 <回車>//格式選擇,PDU OK AT+CMGS=25<回車> //資訊長度 > addr+phone <Ctrl+Z發送>//發送完PDU編碼之後,在不回車的情況下以Hex的格式發送0x1A //文本格式發送 AT+CMGF=1 <回車>//格式選擇,文本 OK AT+CMGS=+86139xxxxxxxx<回車> //輸入手機号 >ABCD1234(短信資訊,回車) hex格式下發送0x1A 注意點:格式選擇和資訊發出後的換行操作 六、PDU格式線上轉換連結: http://www.multisilicon.com/blog/a22201774~/pdu.htm