共享一段CMPP编程时候,移动网关返回CMPP_SUBMIT_RESP消息中,解析Msg_Id字段的代码

来源:互联网 发布:cad网络插座符号 编辑:程序博客网 时间:2024/05/22 15:51

最近刚完成CMPP3.0发送手机短信的开发工作,感觉不错。

 

发送短信方法:是向移动网关发送CMPP_SUBMIT消息,如果CMPP_SUBMIT消息中标识要移动网关发送确认是否成功的CMPP_SUBMIT_RESP消息。CMPP_SUBMIT_RESP结构(CMPP3.0的):

 

字段名
字节数属性
描述
Msg_Id8Unsigned 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

结果:
0:正确;

....

下面给出自己写的解析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(序列号)

原创粉丝点击