短信编码类无错版PDUdecoding.cs
/
///程 序 員:武志文(蠶蛹)
///????????? sillnet163.net
///文??? 件:PDUdecoding.cs
///概??? 要:針對國內短信編碼(USC2)
///組成結構:包含四個函數:
///????????? smsDecodedCenterNumber(string srvCenterNumber)??????????? 短信中心號編碼
///????????? smsPDUEncoded(string srvContent)????????????????????????? 短信內容編碼
///????????? smsDecodedNumber(string srvNumber)??????????????????????? 接收短信手機號編碼
///????????? smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent)?? 整個短信的編碼
///????????? 一個字段
///????????? string nLength;?? //要發送內容的長度,由兩部分組成,接收手機號加上要發送的內容
///????????? 
///版??? 本:1.0.20031020
///用??? 法:
///???????? 1,把文件拷貝到你的項目中,添加引用? using SMS;
///???????? 2,定義本類,例如:PDUdecoding ss = new SMS.PDUdecoding();
///???????? 3,現在你就可以使用本類了,例如:
///???????? textBox2.Text = ss.smsDecodedsms(txtCenterNumber.Text,txtNumber.Text,textBox1.Text);
///???????? 
///本類庫大家可以自由拷貝,必須保留以上版權信息。
///本類僅供研究學習之用,在沒有得到作者本人同意
///下,請不要用于任何商業利益用途。作者本人保留
///一切追究權利。
///版權歸作者所有
using System;
using System.Text;
namespace SMS
{
?public class PDUdecoding
?{
??
??public string nLength;?? //要發送內容的長度,由兩部分組成,接收手機號加上要發送的內容
??/// <summary>
???/// 函數功能:短信內容編碼
???/// 函數名稱:smsPDUEncoded(string srvContent)
???/// 參??? 數:srvContent 要進行轉換的短信內容,string類型
???/// 返 回 值:編碼后的短信內容,string類型
???/// 程 序 員:sillnet@163.net
???/// 編制日期:2003-10-15
???/// 函數說明:
???///????????? 1,采用Big-Endian 字節順序的 Unicode 格式編碼,也就說把高低位的互換在這里完成了
???///????????? 2,將轉換后的短信內容存進字節數組
???///????????? 3,去掉在進行Unicode格式編碼中,兩個字節中的"-",例如:00-21,變成0021
???///????????? 4,將整條短信內容的長度除2,保留兩位16進制數
???/// </summary>
??public string smsPDUEncoded(string srvContent)
???{
????Encoding encodingUTF = System.Text.Encoding.BigEndianUnicode;
????string s = null;
????byte [] encodedBytes = encodingUTF.GetBytes(srvContent);
????for (int i =0;i < encodedBytes.Length;i++)
????{
?????s += BitConverter.ToString(encodedBytes,i,1);
????}
????s = String.Format("{0:X2}{1}",s.Length / 2,s);
????
????return s;
???}
??/// <summary>
??/// 函數功能:短信中心號編碼
??/// 函數名稱:smsDecodedCenterNumber(string srvCenterNumber)
??/// 參??? 數:srvCenterNumber 要進行轉換的短信中心號,string類型
??/// 返 回 值:編碼后的短信中心號,string類型
??/// 程 序 員:sillnet@163.net
??/// 編制日期:2003-10-15
??/// 函數說明:
??///????????? 1,將奇數位和偶數位交換。
??///????????? 2,短信中心號奇偶數交換后,看看長度是否為偶數,如果不是,最后添加F
??///????????? 3,加上短信中心號類型,91為國際化
??///????????? 4,計算編碼后的短信中心號長度,并格化成二位的十六進制
??/// </summary>
??public string smsDecodedCenterNumber(string srvCenterNumber)
??{
???string s = null;
???int nLength = srvCenterNumber.Length;
???for(int i = 1 ; i < nLength;i += 2)?????????????????????? //奇偶互換
???{
????s += srvCenterNumber[i];
????s += srvCenterNumber[i-1];
???}
???if(!(nLength % 2 == 0))?????????????????????????? //是否為偶數,不是就加上F,并對最后一位與加上的F位互換
???{
????s += 'F';
????s += srvCenterNumber[nLength - 1];
???}
???s = String.Format("91{0}",s);??????????????????? //加上91,代表短信中心類型為國際化
???s = String.Format("{0:X2}{1}",s.Length / 2,s);?? //編碼后短信中心號長度,并格式化成二位十六制
???return s;
??}
??/// <summary>
??/// 函數功能:接收短信手機號編碼
??/// 函數名稱:smsDecodedNumber(string srvNumber)
??/// 參??? 數:srvCenterNumber 要進行轉換的短信中心號,string類型
??/// 返 回 值:編碼后的接收短信手機號,string類型
??/// 程 序 員:sillnet@163.net
??/// 編制日期:2003-10-15
??/// 函數說明:
??///????????? 1,檢查當前接收手機號是否按標準格式書寫,不是,就補上“86”
??///????????? 1,將奇數位和偶數位交換。
??///????????? 2,短信中心號奇偶數交換后,看看長度是否為偶數,如果不是,最后添加F
??/// </summary>
??public string smsDecodedNumber(string srvNumber)
??{
???string s = null;
???if (!(srvNumber.Substring(0,2) == "86"))
???{
????srvNumber = String.Format("86{0}",srvNumber);???? //檢查當前接收手機號是否按標準格式書寫,不是,就補上“86”
???}
???int nLength = srvNumber.Length;
???for(int i = 1 ; i < nLength ; i += 2)???????????????? //將奇數位和偶數位交換
???{
????s += srvNumber[i];
????s += srvNumber[i-1];
???}
???if(!(nLength % 2 == 0))????????????????????????????? //是否為偶數,不是就加上F,并對最后一位與加上的F位互換
???{
????s += 'F';
????s += srvNumber[nLength - 1];
???}
???return s;
??}
??/// <summary>
??/// 函數功能:整個短信的編碼
??/// 函數名稱:smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent)
??/// 參??? 數:strCenterNumber 要進行轉換的短信中心號,string類型
??///?????????? strNumber?????? 接收手機號碼,string類型
??///?????????? strSMScontent?? 短信內容
??/// 返 回 值:完整的短信編碼,可以在AT指令中執行,string類型
??/// 程 序 員:sillnet@163.net
??/// 編制日期:2003-10-15
??/// 函數說明:
??///?????????? 11000D91和000800?? 在國內,根據PDU編碼原則,我們寫死在此,詳細解釋請看我的文章????? 
??/// </summary>
??public string smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent)
??{
???string s = String.Format("{0}11000D91{1}000800{2}",smsDecodedCenterNumber(strCenterNumber),smsDecodedNumber(strNumber),smsPDUEncoded(strSMScontent));
???nLength =String.Format("{0:D2}", (s.Length - smsDecodedCenterNumber(strCenterNumber).Length) / 2 );?? //獲取短信內容加上手機號碼長度
???return s;
??}
?}
}
總結
以上是生活随笔為你收集整理的短信编码类无错版PDUdecoding.cs的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 明日之后无人机怎么组装?
- 下一篇: CDMA模块上网设置的过程
