?? pdudecoding.cs
字號:
/////////////////////////////////////
///程 序 員:武志文(蠶蛹)
/// sillnet163.net
///文 件:PDUdecoding.cs
///概 要:針對國內(nèi)短信編碼(USC2)
///組成結(jié)構(gòu):包含四個函數(shù):
/// smsDecodedCenterNumber(string srvCenterNumber) 短信中心號編碼
/// smsPDUEncoded(string srvContent) 短信內(nèi)容編碼
/// smsDecodedNumber(string srvNumber) 接收短信手機號編碼
/// smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent) 整個短信的編碼
/// 一個字段
/// string nLength; //要發(fā)送內(nèi)容的長度,由兩部分組成,接收手機號加上要發(fā)送的內(nèi)容
///
///版 本:1.0.20031020
///用 法:
/// 1,把文件拷貝到你的項目中,添加引用 using SMS;
/// 2,定義本類,例如:PDUdecoding ss = new SMS.PDUdecoding();
/// 3,現(xiàn)在你就可以使用本類了,例如:
/// textBox2.Text = ss.smsDecodedsms(txtCenterNumber.Text,txtNumber.Text,textBox1.Text);
///
///本類庫大家可以自由拷貝,必須保留以上版權(quán)信息。
///本類僅供研究學(xué)習(xí)之用,在沒有得到作者本人同意
///下,請不要用于任何商業(yè)利益用途。作者本人保留
///一切追究權(quán)利。
///版權(quán)歸作者所有
////////////////////////////////////
using System;
using System.Text;
namespace SMS
{
public class PDUdecoding
{
public string nLength; //要發(fā)送內(nèi)容的長度,由兩部分組成,接收手機號加上要發(fā)送的內(nèi)容
/// <summary>
/// 函數(shù)功能:短信內(nèi)容編碼
/// 函數(shù)名稱:smsPDUEncoded(string srvContent)
/// 參 數(shù):srvContent 要進行轉(zhuǎn)換的短信內(nèi)容,string類型
/// 返 回 值:編碼后的短信內(nèi)容,string類型
/// 程 序 員:sillnet@163.net
/// 編制日期:2003-10-15
/// 函數(shù)說明:
/// 1,采用Big-Endian 字節(jié)順序的 Unicode 格式編碼,也就說把高低位的互換在這里完成了
/// 2,將轉(zhuǎn)換后的短信內(nèi)容存進字節(jié)數(shù)組
/// 3,去掉在進行Unicode格式編碼中,兩個字節(jié)中的"-",例如:00-21,變成0021
/// 4,將整條短信內(nèi)容的長度除2,保留兩位16進制數(shù)
/// </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>
/// 函數(shù)功能:短信中心號編碼
/// 函數(shù)名稱:smsDecodedCenterNumber(string srvCenterNumber)
/// 參 數(shù):srvCenterNumber 要進行轉(zhuǎn)換的短信中心號,string類型
/// 返 回 值:編碼后的短信中心號,string類型
/// 程 序 員:sillnet@163.net
/// 編制日期:2003-10-15
/// 函數(shù)說明:
/// 1,將奇數(shù)位和偶數(shù)位交換。
/// 2,短信中心號奇偶數(shù)交換后,看看長度是否為偶數(shù),如果不是,最后添加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)) //是否為偶數(shù),不是就加上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>
/// 函數(shù)功能:接收短信手機號編碼
/// 函數(shù)名稱:smsDecodedNumber(string srvNumber)
/// 參 數(shù):srvCenterNumber 要進行轉(zhuǎn)換的短信中心號,string類型
/// 返 回 值:編碼后的接收短信手機號,string類型
/// 程 序 員:sillnet@163.net
/// 編制日期:2003-10-15
/// 函數(shù)說明:
/// 1,檢查當前接收手機號是否按標準格式書寫,不是,就補上“86”
/// 1,將奇數(shù)位和偶數(shù)位交換。
/// 2,短信中心號奇偶數(shù)交換后,看看長度是否為偶數(shù),如果不是,最后添加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) //將奇數(shù)位和偶數(shù)位交換
{
s += srvNumber[i];
s += srvNumber[i-1];
}
if(!(nLength % 2 == 0)) //是否為偶數(shù),不是就加上F,并對最后一位與加上的F位互換
{
s += 'F';
s += srvNumber[nLength - 1];
}
return s;
}
/// <summary>
/// 函數(shù)功能:整個短信的編碼
/// 函數(shù)名稱:smsDecodedsms(string strCenterNumber, string strNumber, string strSMScontent)
/// 參 數(shù):strCenterNumber 要進行轉(zhuǎn)換的短信中心號,string類型
/// strNumber 接收手機號碼,string類型
/// strSMScontent 短信內(nèi)容
/// 返 回 值:完整的短信編碼,可以在AT指令中執(zhí)行,string類型
/// 程 序 員:sillnet@163.net
/// 編制日期:2003-10-15
/// 函數(shù)說明:
/// 11000D91和000800 在國內(nèi),根據(jù)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 ); //獲取短信內(nèi)容加上手機號碼長度
return s;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -