本文主要是介绍用Java实现PDU编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
PDU编码的方案网上很多,可以参考一下,我们只要按照协议格式去做就行了。要注意的一点是短消息内容需要进行Unicode编码转换。
1.发英文
发英文时可以进行7bit编码或8bit编码.因为英文和数字等小于128的Ascii码,高位为0,所以,我们可以把最高位也利用起来,去掉最高位的0,然后,每个字节的位以次向前移动,这样一条短信就可以发最多160个字符。因为GSM协议规定短信最多是140个字节,这样的话总共是140×8=1120位,如果我们每个字节只占7位的话,那么就可以容下:1120/7=160个字符。
当然也可以用UCS2(也就是UTF-16,每个字符占两个字节),这样的话,发送只能发送最多有70个英文字符
2.发中文
发送中文时,必须用UCS2进行编码,最多可以发140/2=70个汉字。
接收到短消息之后,按编码方式进行解码就行了。
3.参考源代码:
public class PduPack ... {
// 短消息中心号长度
private String smscLen;
private String smscFormat;
// 短消息中心号
private String smsc;
// 源地址长度
private int addrLen;
private String addrFormat;
// 源地址
private String addr;
// 短消息内容编码方式,tp_dcs
private String msgCoding;
// 时间戳,tp_scts
// private String timestamp;
private int msgLen;
// 短消息内容,tp_ud
private String msgContent;
public PduPack() ...{
smscLen = "08";
smscFormat = "91";
addrLen = 13;
addrFormat = "91";
}
public PduPack(String src) ...{
if (src != null && src.length() > 44) ...{
String temp = src.substring(4, 18);
smsc = GFString.interChange(temp);
if (smsc != null && smsc.length() > 1)...{
smsc = smsc.substring(0, smsc.length() - 1);
if(smsc.length()==13)
smsc=smsc.substring(2);
}
temp = src.substring(20, 22);
addrLen = Integer.parseInt(temp, 16);
if (addrLen % 2 == 0)
temp = src.substring(24, 24 + addrLen);
else
temp = src.substring(24, 24 + addrLen + 1);
addr = GFString.interChange(temp);
// 去掉为补齐为偶数加上的那一位
if (addr != null && addr.length() % 2 == 0) ...{
addr = addr.substring(0, addr.length() - 1);
if (addr.length() == 13)// 如果前面有86,去掉它
addr = addr.substring(2);
}
if (addrLen % 2 == 0) ...{
msgCoding = src.substring(24 + addrLen + 2, 24 + addrLen + 4);
temp = src.substring(24 + addrLen + 4 + 16);
} else ...{
msgCoding = src.substring(24 + addrLen + 3, 24 + addrLen + 5);
temp = src.substring(24 + addrLen + 5 + 16);
这篇关于用Java实现PDU编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!