private string GetTextFromPdu_7Bit ( string pdu ) //解析短信正文函数_7-Bit编码 {
string TextInPdu = pdu.Substring ( 58 );//截取PDU串中短信正文部分源码 string Text = \"\";
while ( TextInPdu.Length % 14 != 0 ) //最后一组不满个成员时补\"0\" TextInPdu += \"0\";
char [ ] a = TextInPdu.ToCharArray ( ); //将源码存入字符数组a[] string b = \"\";
for ( int i = 0 ; i < a.Length ; i++ ) //将源码转为二进制并存入字符串b b += GetBinary ( a [ i ] );
char [ ] total = b.ToCharArray ( ); //将二进制码存入字符数组total[]
for ( int j = 0 ; j < total.Length ; j += 56 ) //56位二进制码为一组,循环所有组 {
char [ ] s = new char [ 56 ];
for ( int i = 0 ; i < 56 ; i++ ) //将一组二进制码拷贝到字符数组s[] s [ i ] = total [ i + j ]; char [ ] d = new char [ 56 ];
//------------------------------------------------------------------------------------- for ( int i = 0 ; i < 7 ; i++ ) //组内解码得到目标二进制码数组d[] d [ i ] = s [ i + 1 ]; for ( int k = 1 ; k <= 6 ; k++ ) {
for ( int i = k * 7 ; i < ( k + 1 ) * 7 - k ; i++ ) d [ i ] = s [ i + ( k * 2 + 1 ) ];
for ( int i = ( k + 1 ) * 7 - k ; i < ( k + 1 ) * 7 ; i++ ) d [ i ] = s [ i - ( ( 7 - k ) * 2 + 1 ) ]; }
for ( int i = 49 ; i < 56 ; i++ ) d [ i ] = s [ i - 1 ];
//------------------------------------------------------------------------------------- for ( int k = 0 ; k < 56 ; k += 7 ) //组内循环得到目标ASCII 字符 {
int ascii_nu = 0;
for ( int m = 0 ; m < 7 ; m++ )
ascii_nu += Convert.ToInt16 ( d [ k + m ].ToString ( ) ) * ( 1 << ( 6 - m ) ); Text += ( char ) ascii_nu; //输出ASCII 码相应字符 }
} // END OF loop j return Text; }
//=====================================================================================
private string GetBinary ( char Hex ) //16 进制转2 进制 {
int Dec;
if ( Hex >= '0' && Hex <= '9' ) Dec = Convert.ToInt16 ( Hex - '0' ); else
Dec = Convert.ToInt16 ( Hex - 'A' ) + 10; int displayMask = 1 << 3;
StringBuilder Bin = new StringBuilder ( ); for ( int i = 0 ; i < 4 ; i++ ) {
//append 0 or 1 depending on result of masking //shift left so that mask will find bit of next digit //during next iteration of loop Dec <<= 1; }
return Bin.ToString ( ); }
//=====================================================================================
//=====================================================================================
private string GetTextFromPdu_UCS2 ( string pdu ) //解析短信正文函数_UCS2编码 {
//截取PDU串中短信正文部分源码,读者也可用BitConverter函数实现部分转换 string TextInPdu = pdu.Substring ( 58 ); string Text = \"\";
char [ ] d = TextInPdu.ToCharArray ( );//存入字符数组 for ( int i = 0 ; i < d.Length ; i += 4 ) {
int unicode_nu = 0;
for ( int m = 0 ; m < 4 ; m++ ) //计算Unicode 十进制值
unicode_nu += HexToDec ( d [ i + m ] ) * ( 1 << ( ( 3 - m ) * 4 ) ); Text += ( char ) unicode_nu; //输出Unicode 对应字符 }
return Text;//返回短信正文内容 }
Bin.Append ( ( Dec & displayMask ) == 0 ? \"0\" : \"1\" );
//=====================================================================================
private int HexToDec ( char Hex ) //16 进制转10 进制 {
int Dec;
if ( Hex >= '0' && Hex <= '9' )
Dec = Convert.ToInt16 ( Hex - '0' ); //0-9 else
Dec = Convert.ToInt16 ( Hex - 'A' ) + 10;// A-F return Dec;//返回10 进制值 }
//=====================================================================================
private string GetTeleFromPdu ( string pdu ) //解析TeleNumber 函数 {
//截取PDU串中短信发送方电话号码源码 string TeleInPdu = pdu.Substring ( 26 , 12 ); string Tele = \"\";
char [ ] d = TeleInPdu.ToCharArray ( );//存入字符数组 for ( int i = 0 ; i < d.Length ; i += 2 )//字符两两对调 {
Tele += d [ i + 1 ].ToString ( ); Tele += d [ i ].ToString ( ); }
Tele = Tele.Substring ( 0 , 11 );//去掉末位\"F\" return Tele;//返回发送方电话号码 }
//=====================================================================================
private string GetTimeFromPdu ( string pdu ) //解析DateTime 函数 {
//截取PDU串中短信日期时间源码 string TimeInPdu = pdu.Substring ( 42 , 14 ); string Time = \"\";
char [ ] d = TimeInPdu.ToCharArray ( );//存入字符数组 for ( int i = 0 ; i < d.Length ; i += 2 )//字符两两对调 {
Time += d [ i + 1 ].ToString ( ); Time += d [ i ].ToString ( ); }
Time = \"20\" + Time; //将年份前加20 形成4 位格式,以下为日期时间输出格式控制 Time = Time.Substring ( 0 , 4 ) + \"-\" + Time.Substring ( 4 , 2 ) + \"-\" + Time.Substring ( 6 , 2 ) + \" \" + Time.Substring ( 8 , 2 ) + \":\" + Time.Substring ( 10 , 2 ) + \":\" + Time.Substring ( 12 , 2 ); return Time; //返回短信日期时间[年-月-日时:分:秒] }
//--------------------------短信解码部分结束------------------------- }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务