PDU短信发送编码程序(C# 2.0)

PDU短信发送编码程序(C# 2.0)
[ 2006-3-12 21:28:00 | By: 妖怪 ]
 

程序中的sp是SerialPort类型的对象,在System.IO.Ports命名空间下

//手机号码转换为pdu模式
        private string telc(string MobileNum)
        {
            int tl;
            string ltem, rtem, ttem;
            int ti;

            ttem = "";
            tl = MobileNum.Trim().Length;
            if (tl != 11 && tl != 13)
            {
                MessageBox.Show("wrong number:" + MobileNum);
                return "";
            }

            if (tl == 11)  // 11位转换为13位
            {
                tl += 2;
                MobileNum = "86" + MobileNum;
            }

            for (ti = 0; ti < tl; ti += 2)
            {
                ltem = MobileNum.Substring(ti, 1);
                if (ti == tl - 1)
                {
                    rtem = "F";
                }
                else
                {
                    rtem = MobileNum.Substring(ti + 1, 1);
                }

                ttem += rtem + ltem;  //每两位颠倒
            }

            return ttem;
        }

//Unicode解码函数
        private string ascg(string smsg)
        {
            string res="";
            string ls;
            string rs;

            byte[] resByte = System.Text.UnicodeEncoding.Unicode.GetBytes(smsg);
            for (int i = 0; i < resByte.Length ; i+=2)
            {
                ls = resByte[i].ToString("X2");
                rs = resByte[i + 1].ToString("X2");
                res = res + rs + ls; //注意这里高低位颠倒
            }
            return res.Trim();
        }

private void SendSMS(string csca,string num, string msg)
        {
            string prex = "0891";
            string midx = "11000D91";
            string sufx = "000800";

            string pdu, psmsc, pnum, pmsg;
            string leng;
            int length;
            if (!sp.IsOpen)
            {
                sp.Open();
            }

            length = (msg.Length) * 2;
            leng = length.ToString("X");

            if (length < 16)
            {
                leng = "0" + leng;
            }

            psmsc = telc(csca).Trim();
            pnum = telc(num).Trim();
            pmsg = ascg(msg.Trim());
            pdu = prex + psmsc + midx + pnum + sufx + leng + pmsg;//注意编码组合方式

            sp.WriteLine("AT+CMGF=0/r");
            sp.WriteLine("AT+CMGS=" + (15 + length).ToString() + "/r");

            byte[] end = { 0x1a };
            sp.WriteLine(pdu + System.Text.ASCIIEncoding.ASCII.GetString(end));
        }

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值