最近刚完成CMPP3.0发送手机短信的开发工作,感觉不错。
发送短信方法:是向移动网关发送CMPP_SUBMIT消息,如果CMPP_SUBMIT消息中标识要移动网关发送确认是否成功的CMPP_SUBMIT_RESP消息。CMPP_SUBMIT_RESP结构(CMPP3.0的):
字段名 |
字节数 | 属性 |
描述 |
Msg_Id | 8 | Unsigned Integer | 信息标识,生成算法如下: 采用64 位(8 字节)的整数: (1)时间(格式为MMDDHHMMSS,即 月日时分秒):bit64~bit39,其中 bit64~bit61:月份的二进制表示; bit60~bit56:日的二进制表示; bit55~bit51:小时的二进制表示; bit50~bit45:分的二进制表示; bit44~bit39:秒的二进制表示; (2)短信网关代码:bit38~bit17,把短信 网关的代码转换为整数填写到该字 段中;(3)序列号:bit16~bit1,顺序增加,步 长为1,循环使用。 各部分如不能填满,左补零,右对齐。 (SP 根据请求和应答消息的Sequence_Id 一致性就可得到CMPP_Submit 消息的 Msg_Id) |
Result |
4 | Unsigned Integer |
结果: .... |
下面给出自己写的解析Msg_Id的简单代码:
public class ToByteTest { public static void main(String[] args){ long temp = -4025053409177436045L; byte[] bt = new byte[8]; for(int i=0;i<8;i++){ bt[i] = (byte) (temp >> (56 - i * 8)); } int mask = 0xf0; int month = (bt[0] & mask)>>4; System.out.println("Month:"+month); mask=0xF; int date = (bt[0] & mask)<<1; mask=0x80; int date2 = bt[1]>>7; date = (date&(date2|0x1E)); System.out.println("Date:"+date); //01111100 mask=0x7C; int hour = (bt[1]&mask)>>2; System.out.println("Hour:"+hour); mask=0x3; int minute = (bt[1]&mask)<<4; minute |= (bt[2]&0xF0)>>4; System.out.println("Minute:"+minute); mask=0xf; int second = (bt[2]&mask)<<2; second |= (bt[3]&0xff)>>6; System.out.println("Second:"+second); mask = 0x3F; int Msg_Id = (bt[3]&mask)<<16; Msg_Id |= (bt[4]&0xFF)<<8; Msg_Id |= (bt[5]&0xFF); System.out.println("Msg_Id:"+Msg_Id); mask = 0xFF; int seq_id = (bt[6]&mask)<<8; seq_id |= (bt[7]&mask); System.out.println("seq_id:"+seq_id); } } 执行结果如下: Month:12(月份) Date:16(日期) Hour:9(小时) Minute:2(分钟) Second:13(秒) Msg_Id:1(短信网关代码) seq_id:115(序列号)此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/70310.html