最近几天研究通过数据线把手机和电脑连接起来,然后发送手机短信,看了点PDU编码的东西,那个PDU编码的东东害的我花费了两天时间没有发送出短信,而同事在无意中看到其编码的规则,加上我的理解,做些记录。
首先,通过手机发送中文短信,必须采用PDU的编码方式发送短信,所以在先要发送AT指令,告诉手机,发的是PDU编码:(C#伪代码)
SerialPort port
command = AT+CMGF=0
port.Write(command + "\r");
其次,再告诉手机,你的整个PDU的编码长度是多少:
int cnt = 15 + (pdu.Length - 32) / 2;
command = AT+CMGS=cnt;
port.Write(command + "\r");
String pdu = getPDUMessage(Message,PhoneNo);
//23=15+8,15是 PDU的编码规约头,固定是15,后面的8是你传的汉字的长度,一个汉字两个字符,所以这里的8是我传了4个汉字,规约头的购成见下面的PDU编码方法,即PDU的常量值
private string getPDUMessage(string Sms_Text, string Dest_Number)
{
string pdu = ""; //开始合成 PDU 串
pdu += "0011000D9168";
//SMSC中心号码补F凑成偶数
/*char[] tmpSmscNumber = ("13800100500" + "F").ToCharArray();
for (int i = 0; i < tmpSmscNumber.Length; i += 2) //字符两两对调
{
pdu += tmpSmscNumber[i + 1].ToString();
pdu += tmpSmscNumber[i].ToString();
}*/这段代码原来是要加上短信服务中心的号码,加上后不能发短信了,所以得去掉
char[] tmpDestNumber = (Dest_Number + "F").ToCharArray();//对方号码
for (int i = 0; i < tmpDestNumber.Length; i += 2) //字符两两对调
{
pdu += tmpDestNumber[i + 1].ToString();
pdu += tmpDestNumber[i].ToString();
}
pdu += "000800"; //08 表示采用 UCS2 编码
//短信正文转为Unicode
byte[] tmpSmsText = Encoding.Unicode.GetBytes(Sms_Text);
pdu += tmpSmsText.Length.ToString("X2"); //正文内容长度
for (int i = 0; i < tmpSmsText.Length; i += 2) //高低字节对调
{
pdu += tmpSmsText[i + 1].ToString("X2");//("X2")转为16进制
pdu += tmpSmsText[i].ToString("X2");
} //PDU串 完成
return pdu;
}
最后,发送PDU的短信
command = pdu + "\x01a";
port.Write(command);
我开始一直发送不成功的原因就是PDU的长度和实际长度不一致造成的
注意,里面的command是字符串,要用引号引起来
分享到:
相关推荐
短信PDU编码,直接填入接收者号码,及短信内容可生成PDU编码 短信PDU解码,可解析接收到的编码格式为PDU的短信内容
而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般...
真正正确的PDU编码,希望对大家更有用!
这是一个用C#编写的支持PDU编码的用来收发短信的demo程序。源码上传,希望对您有帮助。
PDU编码工具用于短信编码
pdu模式发送短信
用C语言设计PDU正常短信以及长短信的编码解码
而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般...
PDU GPRS Java 发送 中文短信 程序
本程序实现了用java语言控制串口,采用pdu编码对数据进行编解码。最终分别实现了收发短信的功能。
PDU短信编码工具,适合初学者更方便将短信进行编码!
针对SIM800C通讯模块,如何向10086号码发短信,及PDU编码的详细规则进行了梳理,形成该学习实践笔记。
//手机号码转换为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...
短信PDU编码规则,讲的很详细,希望对你的项目有帮助
1. Convert ASCII to 7-bit PDU 2. Convert 7-bit, 8-bit and 16-bit PDU to ASCII 3. Decode/Parsing the hexadecimal (PDU) of SMS message 4. Encode ASCII characters to be sent as SMS ready string
而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可...
初学者开发GSM模块、4G模块的时候,需要将国标字符转换成unicode码发送到模块中,才能实现中文短信的收发。该软件可以下显示转码后PDU包的格式,也可以进行PDU包的解码,很适合调试过程中的朋友。
完美实现GSM模块发送中文PDU格式短信,包含常用字库
PDU短信编码器, 一种pdu短信编码工具,可以将数据转换成unlcode码,方便gsm方面的开发